{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "91ef7b62",
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'test_model'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m/var/folders/ms/mpc19fxd7zz_dr0tr65kskdh0000gn/T/ipykernel_7472/2905423178.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mseaborn\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0msns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtest_model\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtest_model\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      7\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmetrics\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mconfusion_matrix\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mConfusionMatrixDisplay\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msc_sharp\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mscSHARP\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'test_model'"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import torch\n",
    "from test_model import test_model\n",
    "from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\n",
    "from sc_sharp import scSHARP\n",
    "import utilities\n",
    "from sklearn import preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "d521f500",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Total Accuracy</th>\n",
       "      <th>Val Accuracy</th>\n",
       "      <th>Test Accuracy</th>\n",
       "      <th>Total SD</th>\n",
       "      <th>Val SD</th>\n",
       "      <th>Test SD</th>\n",
       "      <th>Config</th>\n",
       "      <th>Dropout</th>\n",
       "      <th>Batch</th>\n",
       "      <th>Neighbors</th>\n",
       "      <th>GCN Layers</th>\n",
       "      <th>Final Embedding</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>127</th>\n",
       "      <td>0.931358</td>\n",
       "      <td>0.988372</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.001228</td>\n",
       "      <td>0.006588</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_15.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.931358</td>\n",
       "      <td>0.988372</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.001022</td>\n",
       "      <td>0.005481</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_25.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.931069</td>\n",
       "      <td>0.986822</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000975</td>\n",
       "      <td>0.005232</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_25.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>35</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>145</th>\n",
       "      <td>0.930925</td>\n",
       "      <td>0.986047</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.001328</td>\n",
       "      <td>0.007124</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_60.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>20</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>130</th>\n",
       "      <td>0.930925</td>\n",
       "      <td>0.986047</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000914</td>\n",
       "      <td>0.004903</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_15.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>35</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0.930780</td>\n",
       "      <td>0.985271</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.001066</td>\n",
       "      <td>0.005720</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_25.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>95</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>0.930636</td>\n",
       "      <td>0.984496</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.001180</td>\n",
       "      <td>0.006329</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_60.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>35</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0.930636</td>\n",
       "      <td>0.984496</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000963</td>\n",
       "      <td>0.005168</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_25.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>80</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>0.930636</td>\n",
       "      <td>0.984496</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000681</td>\n",
       "      <td>0.003654</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2_60.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>95</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>70</th>\n",
       "      <td>0.930491</td>\n",
       "      <td>0.983721</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.000457</td>\n",
       "      <td>0.002451</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3_15.txt</td>\n",
       "      <td>0.0</td>\n",
       "      <td>95</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     Total Accuracy  Val Accuracy  Test Accuracy  Total SD    Val SD  Test SD  \\\n",
       "0                                                                               \n",
       "127        0.931358      0.988372            0.0  0.001228  0.006588      0.0   \n",
       "1          0.931358      0.988372            0.0  0.001022  0.005481      0.0   \n",
       "4          0.931069      0.986822            0.0  0.000975  0.005232      0.0   \n",
       "145        0.930925      0.986047            0.0  0.001328  0.007124      0.0   \n",
       "130        0.930925      0.986047            0.0  0.000914  0.004903      0.0   \n",
       "16         0.930780      0.985271            0.0  0.001066  0.005720      0.0   \n",
       "148        0.930636      0.984496            0.0  0.001180  0.006329      0.0   \n",
       "13         0.930636      0.984496            0.0  0.000963  0.005168      0.0   \n",
       "160        0.930636      0.984496            0.0  0.000681  0.003654      0.0   \n",
       "70         0.930491      0.983721            0.0  0.000457  0.002451      0.0   \n",
       "\n",
       "       Config  Dropout  Batch  Neighbors  GCN Layers  Final Embedding  \n",
       "0                                                                      \n",
       "127  2_15.txt      0.0     20          2           2               15  \n",
       "1    2_25.txt      0.0     20          2           2               25  \n",
       "4    2_25.txt      0.0     35          2           2               25  \n",
       "145  2_60.txt      0.0     20          2           2               60  \n",
       "130  2_15.txt      0.0     35          2           2               15  \n",
       "16   2_25.txt      0.0     95          2           2               25  \n",
       "148  2_60.txt      0.0     35          2           2               60  \n",
       "13   2_25.txt      0.0     80          2           2               25  \n",
       "160  2_60.txt      0.0     95          2           2               60  \n",
       "70   3_15.txt      0.0     95          2           3               15  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid_results = pd.read_csv(\"grid_search_jung_output/combined.csv\", header=None, index_col=0)\n",
    "grid_results.columns = [\"Total Accuracy\", \"Val Accuracy\", \"Test Accuracy\", \"Total SD\", \"Val SD\", \"Test SD\", \"Config\", \"Dropout\", \"Batch\", \"Neighbors\"]\n",
    "grid_results['GCN Layers'] = grid_results['Config'].apply(lambda x: x.split('_')[0])\n",
    "grid_results['Final Embedding'] = grid_results['Config'].apply(lambda x: x.split('_')[1].split(\".\")[0])\n",
    "grid_results['GCN Layers'] = pd.to_numeric(grid_results['GCN Layers'])\n",
    "grid_results['Final Embedding'] = pd.to_numeric(grid_results['Final Embedding'])\n",
    "grid_results.sort_values(\"Val Accuracy\", ascending=False).head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "4662ac87",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "set()"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "set(range(1,217))-set(grid_results.index.to_numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e732b214",
   "metadata": {},
   "outputs": [],
   "source": [
    "# selecting 1 because Sd is lower and accuracy tied"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9b8ca648",
   "metadata": {},
   "outputs": [],
   "source": [
    "font = {'family' : 'normal',\n",
    "        'weight' : 'normal',\n",
    "        'size'   : 18}\n",
    "\n",
    "plt.rc('font', **font)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "91c126dc",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "findfont: Font family ['normal'] not found. Falling back to DejaVu Sans.\n"
     ]
    },
    {
     "data": {
      "image/png": "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2JLDzlrvs0eOOIBzTjmcgw46iLFjx6pJVII0hocvjja6dQPNhjqubqjeaxPz2Z59SDKEZ7esi7KutsU2zZjZlYT6ewwePDjaJu2yZctWglnFey0PZuVRV1dLdXV1ytU8B4NBHp36CIMKg4wvid4ybViPAAf3buTpp57kS1/6Ejk5HakuTL6//e1vrF+3nsBnApABW9/eyn333dc02mCqCwQCXH3VVSxZsoQDDzyQO/70J3y+FBzOvxtav3493//+96mrq6Nfv348/PDDXXJCXyUdacLn83HFFVdw8skn8+CDf+Odd94ma9ty6vuMJnvDJ/hcI2ef80UuvvhiSkpKkh1ut+D3+5tqRr74xS/inGPlypW8//77/PeN13lkyQqeXJ7PcWU1nDW0lt6t1H44B/O2+/nXqjwW78gg05/BUUcfwwknnMARRxzRbfrgJFswGH0+EwAavJHRwhcfz7z8zN7bGM2HypbOFs4Eo92WzmmxTTPOufuB+wEmTpzYoYPonGPnjh24vmV7r8v0Lg62bt2acknH22+/zeo15Vx9UHWbTUi/OKyaWz7y8+9//5svf/nLnRdgnDz77LM8+uijBIcFIXQIgyOCPPvss/Tu3ZuLLroouQHGwd///ncWLFxID2Duxx/z+OOPp3TNVEtbt27lrrvuIisri2uuuSZtRl9csWIF119/PcHGBkYXF7Bk40Z+8P3v84tbbuly13tKOtLMsGHDuPXWW5g7dy4/vfFGKstnMnjoUH71y19q5JAkM7Om/iIXX3wxS5cu5bnnnuOV//yHd9bncNbQGs4cWts08gvAlhoff1uUz7xtfvr2KeGqq77CF77wBXr06JG8L9JNNd01ilZZkUmzoY73uqx14BqcmrglV3g43AHApy3WDQg9R2t6FReVlZUEAo3eELkthJft2LGDIUOGJCqEuHPO8cjfH6Ys33FEadv970cXBxjbs5EnHn+Ms88+O2WaJNXX13P33Xfz/PPP4wY43OERo9Id6gjWBbnvvvtYt24d3/3ud1Pme0Wqq6vj/vvv55lnnmE8cC7wNHD//feze/duLrvsspQfsXDhwoX86le/Ys2aNQCsXr2a66+/nmHDhiU5so7buXMnTzzxBE8//TSZZhxeUkRxdiY5fh/zP/2Uiy++mK9//eucffbZXaZ2UUlHmho/fjz333cfs2fP5oQTTtBFahc0cuRIfvzjHzNlyhTuvfce/vHfN5m3PYvvHVpJQaZj3jY/d833Joe8+urLOeecc1L+xJ/KmhKGVpKOmp17hjreazDXQIt9SDLMDD0fDbzeYt1RQAWwhAQJDyIQTjCyVnv92euHHN20LNUGGpg+fTrLV6zkynHV+NrRovPsoTX8Zs4OXnnlFc4666zEB7ifFi5cyG9++xtWrVxFcFQQd7Br3rzSB+5IRzA/yIsvvsjcj+dy/U+u5+CDD05azLEIBAK89dZb/PX++1m3YQNHAZ8HDONLOHKAxx9/nHffeYcrrryS448/PqWaW23evJkPPviA1159jU/mfUJuVgEnjv4q9YEaPlr2CpdeeimTJk3i5JNP5qijjqJnz57JDrldVq9ezfPPP8+0F1+krr6e/vk5jCouIDvDOzb98nIozPTz6Y7d3H333Tw6dSrnnHsuZ511VtJrPpR0pLHw/BrStZWWlnLzzT/nM585jl//+lf8YS5cNLKKP35c6NVS/fo3lJXt3SRDOpff7ye/IJ/K2sq91rli1zRPB8WhnyOFxgZIlUIt1ZlZGd7Ef2ucc+EmU28DG4DLzez2iHk6DgVOBB5K5HC5u3Z5Q267TO+Ooy9ibiT8Oc22SRVPPP4YvXPhmH7Nh8mduthLoloOinFgr0aG9wjy1BNPcMYZZ3TZC9gdO3bwwAMPeLWWuXh9OFo7BRu4gx2BvgHWzVrHVVddxec//3muvPLKpF/gtaaiooL//Oc/PPfss6zfuJG+5uNSYETErKcZGGcDY3H8Z916brrpJgYOGMB5X/oSp556apdrmhQMBikvL2fhwoXMnz+fuXM/przcq9XokduLQwaeQFXdLtbtXMphg0+iT8FAlm2ew8J5C5g507sfMXz4cMaPH89BBx3EuHHjKCsr6zL9I+vq6njnnXd44YV/M3fux/jM6JeXzbDevSjI9C7lP93hlU1jexaSn+lnYt9ittfWs6qyhocffphHHnmEY489ljPPPJNJkyYlZTJnJR0iXcTJJ5+MmfHzn/+cn3/Ug5Levbj9jj+pz0YXUtq3lN3Vu/eaddyNd00zkgdPjNL3I3TtVVpamugQ05aZXQKE2x71AbLM7MbQz6udc1MjNv81cCkwGXgLwDnXYGbfBZ4C3jWzB4AewHV4s6v8LJHxV1RUeC/8ezdzcKH5lZq2SQHLly9n7sefcMHI6mZNQoGmuYZaMoPPD67mnvnrmDlzJkceeWQnRNp+tbW1PP3000x9dCp19XUERwRxBzpoTwVzKTSe2ogtNF557RX+++Z/ufCCC/nqV7/aJTr0NjY2MmPGDF555RXee/ddGhobGWTGV4BxLoiP6BfXozAOcEEWAO+vX8+f/vQn7r3nHo47/nhOPfVUJk2a1OlDrocTjCVLlrB48eKm55oa70Sb5c+hV34Zhww8gbLi4fTI6Y2Z8eaiJ5v2kZ2Zx4EDjmVc/2PYUb2JjbtWsmXrGv79rxd57rnnACgsKGTU6FGMHj266dHZiciaNWv417/+xcsvv8zu3bvJy/QzsiifAQW5TTUbYZX1e1fD98rJoldOFtUNjZTvrmXGB+/z7rvv0qdPH8466yxOP/30Tk2OlXSIdCEnnXQSv//976muruaiiy9RwtHF9O/fn5XzVhJk78Rir9qNCLbbK6T69euXsNi6gcvwJviLdEvo+W1gKvvgnHvGzGqAG4E/4I1k9QbwY+dcwvpzwJ6EwkWbwNWXgWVkplTS8dJLL+H3wfFl9fveOMIRfRuYmuX1feoqSUcgEOA///kP9//1fnZs24Hr7wgeEoRWbubbXO//2Y1v8T/vB3eIo3F4I4F5AR5++GGe/+fzXH7Z5Zx++umdfnHunGPBggW8+uqr/Pf116nYvZs8n48JwSCHA2UOaJFsvBS6oXJai1qPQ4BDnNcxanZDA++/+SZvvPEGRT168NmTT+bUU09l7NixCbkg3717N5988gnz5s1jwYIFzRKMDJ+fotw+9C8YTa/SfvQqKGtKMiLNWfNfdlZvBuDNRU9SnNeXwwafhJnRK78fvfL7AUcTdEF2VW9he9UGtldtZMWitcyZM5dg0GsjW5BfwJixYzjooIM46KCDOOSQQ+LeX8I5x8yZM3nyySf56KOP8JnRNzeLMX2L6ZWd2aHfcV6mn9E9CxhZnM/mmjrWVu7iwQcf5OGHHuLEyZP5yle+wpgxY+L6PaJR0iHShZgZ+fn5VFdXc8ghhyQ7HGlh2LBhvPf+e14fjRY3c/e6AIlUAdk52Uo69oNz7sQYtp0CTGll3YvAi3EJKgZVVVXe52dkRd/An9W0TVfnnOO/b7zO+N71FGY1/7ufuji3qabj1o8KGFIYaNbMyu+Do/rW8tb/3qOmpibp/ZwWLlzI7//we5YvWw69ITA5APu48Ruu1WxZ49mkANzRjsC2ALvm7eK2227jH8/9gx98/wedcl7fuXMn06ZN48UXXmDd+vVkmjHGOQ4BRgaDZLRSqwFe+8O29MfoD3w+GGQJ8ElFBf9+/nmee+45Bg8cyBlnncVpp5223/1IA4EAb7zxBtNenMbHn3xMMBjEZz6K8/rSv9BLMHrml9Ijpzc+376bCe2s3kxDwBste0tleavb+cxHz/xSeuaXckA4lmAju2q2sqNqEzuqN7L80zXMmjUL5xx+v5+JEydy5pln8pnPfGa/ki7nHB9++CEP3H8/S5ctI8fvZ0RRPgOj1Gq09OmOyqaajhmbdlCY5Wdsz72zZq9ZVg798nKoamikfHcN77zlJZCTJk3iyiuvZPTo0R3+DvuipEOkiwm3c061oTO7g+HDh0MQqASK2/8+22UMHTK0y7Zhl8RrSigyorfVcRmpk3QsW7aMbdt3cN64vbvArK7MoCbg/Z0v2hn97/3wPg28traRuXPncvTRRyc01tY0Njby4IMP8vjjj0MuBI8M4ga5ljf+92Jzran/lu8tH67YtX7DoTcETgjAOlj9yWquvvpqzj//fL75zW8mZFCQnTt38sgjj/Dvf/2L+oYGhphxDnCgc2Tv64vh1XKEk44HcZTRvMYjkh9jHDAOqHWO+cCcdeu45557ePCBBzj7nHO49NJLO9z342c/+xnvvPMOhbm9GNV3Ev2KhtKroAy/r/MHU8nw+SNqQw4FoCFQz9bd69i0ayXz5ixk+vTpnHvuuVx77bUd+oytW7fyu9/+lukffkh+pp8DexXSPz8HXzuTmMr6RhpDQ7LvqGtf17T8TD9jehYyoiifNbtr+GTObK644grOPPNMrrrqqoQ0C1TSIdLFdJWOa7K38Gz0tt3abE7VjAPfDh9jjxmbwMikq6utrcV8fjAfWas/wFftdSTPWfgiwfzeOJ8/ZWasX7hwIQBjenZsssvRxY34zNtPMpKOhoYGbrjhBj788EOCw4K4Q9vZbwOvlsMaQufoLd5TqzUe4CUxA6GxXyP2ifHMM8+wbNkyfve738V1eN158+Zxw/XXU1lRwXjgGKA0SvOptmxgz8yZq2L47ByMicBE5+3jfw0NPPP007z+6qv8+re/ZezY2M99s2fPJiezgONGnkdBdnHM70+0zIwsyoqGUVY0jKElB/HfRU8wa9bsDu1r/fr1fPvb32bXzp2MLi5gcGFuu5ONePD7fAzvkc/gglyW7arihRdeYNGnn3LXn/8c98RDt91ERNpp4MCB5BfmQywjm1Z4c3R0pOCV9FFXVwcZ3n0+X9U2LNCABRrIqNyIr2obQcvwtkkBq1atItdv9MlpY8LMNmRlQGmeN1lqMtx3331ewnF4EDex/QkHAA3e0Ndf+tKXvKZh7R3vzA/ucEdwUpA5c+bw5z//uSOhR1VbW8sN11+Pf/duvgWcg1EaQ7LRtB+af7eOpMBlGF/C+CbgKiq44SfX09AQ+6BwP/rRj8DXyCvzH2Lumjepa4g6b2e7NQTqmn23cFOr/VFdX8lHq17htYVTyc3N5nvfu65D+7nvvvuo3LWLI/sWM7RHXocSjsZgsNn3a2xrMttW+H0+xvQs5LA+RSxdtoxnnokyye1+UtIh0kWpxqPrMTMOPvBgMra1f6hB2+Ydx4MOOihRYUkKqK+vhzbanjtfBrUpknRs376d4mwXdQbymkZrdvFT0xj9PNYzq5Ht27ZFXZdIgUCAf/7znwSHBHEHdGBy+QY4/fTTueaaazj99NPbn3SEuKGO4PAgL7z4QtySzC1btrCrooJJwSD9OpBshNXS/LvtT71bf4wJwSDbdmzv0PwzJ554IlMfncopp57M0s2zeHn+gyzZOIug61ii29BY1+y7NTR2/HcfCDayYN37/Gf+g6zevpBzzz2Hxx5/jMMOO6xD+6usrCTTZ+S2HAYuBg1B1/z7BTvwtx1SkOknw2cJGdhCzatERGJw2GGHMX36dG8Y3Pb0gd0MPXv1ZODAgYkOTbqwQCAA1sZFhfkIBjp2QdXZAoEAfl/0i5rqRuP0M7yLH4C3X3wq6nYZBoHQiECdqbGxkcbGRuhoy6ZMb+QtCD13ZD/ZEAwEaWhoiEsTqwEDBjByxAjeXL6cvs4xsoOJRw7Nv1vRfsT0KY53zDhwzBj69u3boX2UlpZyww03cOGFF3LXXXcxc+Z/WbtjEUcMPz3mJleZ/uxm3y3b37G+JjurtzBj5TR2Vm9h8uTJfPOb39zvebQuuugifjB7NjM27+KgXgX0yIq930qmz5p9v8z2zNYZxZaaOhbuqCInN5dzzjmnQ/toi2o6RERiEL6bZVvacVJ34N/qZ8LhE1Rz1c15SUdbfwNGQ2PH+kh0ttzc3KbO4i3l+R3Tpk3jzjvvZNq0aeT5oycntQEfObmdP39FdnY2xxx7DBkrMmJrJhmWCTU1NTz77LPesK2xXh/uhIzlGUyaNImCgoIOBLA3n8/Hr3/zGwYMGcIjwD9x7G6rn0krcmj+3ToyEGwljn/geBwYcsAB3PLLX+73uW/o0KH84Q9/4MYbb6Q6uIvXFz5C+fbFMe0jMyO72XfLzIgt2XPOsXzzXN749FHIauS3v/0tP//5z+Myce+ECRP4w2234c/LZ/rGHSzaURlz8yi/z9fs+/ljHLSktjHAx1t3MXvLLkoHDODee/+SkBtlSjpERGIwcuRI8vLzYFM7Nq6AYE2Qww8/POFxSdfmXMRFYKC+eb+AQGxzXSRbaWkp22ocDVGui3L9rtnFT24rScfmWn/ShpD+3nXfo29JX/xv+7HyTrwZsA78b/vp1aOX12chjvr27ct9DzzABRdcwFyfjzvMeBNHXQeSj46oxfEGjjvMmJ+RwSWXXMK9f/lL3CaeMzNOPfVUHnrobxwwYjgfLP83c9f8t8PNrWIRCDYyY+VLzFr9GodPOIy///3huA+AMGHCBB597DHOPOss1uyu5f1NO9lSk/jmls45yitreH/TDrY1BLnssst48MEHGTp0aEI+T0mHSBfV7CJFuoyMjAwmTphIxpYM9lWe2ybvgmbSpEmdEJl0ZZHDJVtjfbP219ZYH9omNWrDRo4ciXOtzzy+L9tqjV11jpEjR8Y5svYpKSnh3nvuZczIMfim+7Dpxn51YNiXOrAZRsb7GRww5AD+cu9fKC0tjfvHZGdn861vfYuH//53Jh17LP8Fbvf5+B+O+gQlH/U43sFxu8/HW8DRxx/PI1OncsUVV5CV1cqcNPuhrKyMP9/9Z8477zyWbJrFzJUvJ7SsDAQD/G/Z86zetpDLLruM3//+9/Ts2TMhn1VYWMgPfvAD7r33XkoHDGT2ll0s2lFJMEHfryEYZO7WChbuqOTgQ8czdepULr300oQctzD16RARidGkSZN45513YDetzloMXtLRf0D/hFxgSGrx+XwQunhw/qxm7a+dPxecN/lZKjjkkEMwM+Zty2REUez9MuZv89okHXroofEOrd1KSkq4++67efTRR/n7I38nuClIYGwAN8K1eTvWFbumeToopu2hs4NgK4yMhRlYo3HRJRcxZcqUhMzREWnIkCH86le/YuHChfz1gQf4z6xZ/M/n44RgkAl4c2zsr0YcM4F3fD52B4McOXEil19xRUInlgvLzMzku9/9Lj179uSvf/0rfl8Whw35bJv/P8V5fZtmJC/O60tx3r77mQSCjXy4Yhobd63ixz/+sTdwQCcYN24cf/3rX7nnnnt47rnnqGwIcGjvHmS1MUFgYZa/aXLAwiw/hVltX97vbmjk422V1DQGmuaP6YwmwEo6RLoY1XB0fRMnTgS8pMIVtnK8AuDb6uPIM4/sxMikq8rMzIRwx+mMLGoqt/Pss896PxcWYS6Y0DuM8dSzZ0/GjR3LzPL5nDM89iqCGZuz6NunhAMOOGDfGyeQ3+9nypQpnHTSSdx5553MmDEDW2E0HtoIrTTVj5wIsNVJAQE2gf9jP26XY/xh47n22msZNmxYnL9B28aNG8cfb7+djz/+mAfuv58X583jfZ+Pk4NBDgKsRfJRxp4ZycuI/isI4pgHvO7zsTMY5LBDDuGKK69Myuh8l1xyCVVVVTzxxBNsr97AuLKjKSs+IGrycdjgk5qSjsljvtrmfgPBRtbuWMKnGz6gomY7V199daclHGFZWVlce+21jB07lt/97ndM37yTccUFlORGP0eM7VnYlHQcUdp6TYxzjvVVtSzaVUV+fgG333or48ePT8RXiEpJh0gXpeSj6xowYACl/UrZuGmjd2c0mm3gGl1TgiLdm5d0tNFR3AXI6sCoNclyyqmncscdC1lVkcHQHntqO4YUBpqaXQ0pDDCksHlNyI46Y972TC686PNdZnCFwYMH8/vf/57p06dz5113su69dbh+juBhQYjS17vNZKMKfHN92HqjtKyUq394Nccdd1xSv+uhhx7KXX/+MzNmzODee+7h6ZUr+dCMM51rNp/HaRgbQs2wLotSG7IBxwtmlDvHyOHDuenb307q+c3M+Na3vsXo0aO5996/8L9l/yQ3q4CBPUczqOcoehcMaPZ7b6t2I+iCbKksp3z7ItbtXEpdQw1DBg/hpmtu4IgjjuiMrxPV5z73OYYNG8bNN9/MrLVr6ZeXzajiAnL9sTdtrKhvYPHOKrbX1nPoIYfwfzfd1OGRxTpKSYdIFxMMjVqxdetWBgwYkORopDVHTDqCF1950TteUWq9bbNhZh0eu13SS25uLi7QCM4RzO/dNCN5MK83wfze+Hdv8jqVp4hTTjmFe++5m9fXZnP5uD0Tt10yuqYp6bhx4u693vfftdk44LTTTuusUNvFzDj66KOZOHEizz33HA/+7UHqXq0jMC6AG+32PbG3A1tqZCzIIDMjkylXTuHLX/5yl6m9MjOOPPJIJk6cyEsvvcR9997LvVVVTHaO4wBfG18wiOMt4G28fgfXX3UVn/vc55r1U0qmk046ieOPP54PPviAl19+mQ+nf8jSTbPIzSpgQPEohpYcSM+8Ug4bfFKz9znn2Lp7Lau3LWxKNHKyc/jM8cfyhS98gYkTJ3aJ7zhq1CgeeughHn30UR5/7DH+t3E7A/NzGNYjn+yIJletNamqamhk+a4qNlTXUVBQwPe//x3OPPPMpHw3JR0iXUx9vTdixeLFi5Pa5lnaNmHCBF544QXYAfTee71vs48xY8fEbVhMSW25uV6/DVyQ+iFH46vyko7acWcAkPXJMymVdBQWFnLq5z7Pf156kfNH1FCUte+a2foAvLE+l6OOPKrLzluTmZnJV77yFT772c9y++238+6778JGCBwZaH1enlrImJEBm+DIo47k+9//fpftx5WRkcGZZ57Jcccdx+23387rb77JGuArOLKwvZpU1eJ4CmMZjlNOOYXvfve79OjRIxmht8nv93Pcccdx3HHHUVVVxfvvv89bb73F9A+ms2zzbHoVlHFQ/2PpVzQM5xxrdyxh4Yb32VW9lZzsHI474TOccMIJHHnkkeTkdGSw4MTKzs7msssu44wzzuChhx7i5ZdfZl1VHUMKcxlWmEeGzxjbs3kHw7pAkOW7qlhbVUtWZiYXXXQRF154IYWFHZujJB6UdIh0IevXr2fXLm8W0HffeYcvf/nLSY5IWhMeBtc2G653iwuuBmA7TDxNTavEk5cXmpMiUA++XIL5LTLVQMOebVLEV77yFV588QVeXZPN+SP23bfj3Q1ZVNTBVy+4oBOi2z8lJSXceuutvPrqq/zhD3+g/r/1NB7XCC2vtyvB/64ff72f6350nTcaWRdpNtaW4uJibr75ZsaPH8+f7riDqcDXnOO0iBqPehxTzVhnxo9+8EPOOOOM5AUcg/z8fE455RROOeUUKisree2113jyiSd5Z8mz9C8+gMZgA5sr1jB0yFC+dcHlTJ48OWUS/tLSUn7yk59w4YUX8sD99/P2O++wobqOA3sW0CtnT63a+qpaFu2sIugcX/ziF/na175G795R7o51suTXG4lIk1deeQUDThpQx8effML69euTHZK0ori4mMFDBmNbo1xgbANcckfnka4lfHcxPDxu/ZCjqR8SGuvfOVxDbVLvQHbE4MGDOe6443ltXS7V+5jXMBCEF9fkM3bM6E7tuLo/zIzPfe5z3HvvvRRlF+F/2w9VERtUg/8dPwUZBdx9992cccYZKZFwhJkZ55xzDj+98UZWOcerLda/DJQ7x89uvjllEo6WCgsLOffcc3n0sUc5//zz2Vm3gerAdr7xjW/w0MMPcdppp6VMwhFp8ODB3HLrrdx555307NOXjzbvZN3uGpxzLNm5m3nbKhg9ZgwPPfww1113XZdIOEBJh0iX8u47bzO6ZyNnDPXuGr733ntJjkjacvhhh+Pb5ttrvg7bavh8vqSM6CJdU1PSEYgy4VewEVww5ZIOgIsvvpjqBq+vRlumb8piSzVcfMnXUurCHGDEiBHcdedd5Pnz8E/3QxBwkPFhBtkumzv/dCdjxoxJdpgddsopp3DeeefxIbApdDJbj+MjvFqpE088MZnhxUVWVhbf+c53+M8r/+Gll19iypQpZGR0bJ6ZrmT8+PE8+Le/cfiECSzYsZvFO3ezsqKaM888kzvvuithk/x1lJIOkS5k9eo1DO/RSN/cID2yjdWrVyc7JGnDQQcdhGtwsKv5cttmDD9geMo1l5HEKSoqAsAa9m6GZI21zbZJJWPGjGHChMN5uTyP+lam7HAOXlidy9Ahgzn22GM7N8A4GTJkCD/4/g9w2x222ryZzLfCdddel/Shf+Ph61//OlmZmXwY+nk6kJuTw9e+9rVkhiXtkJeXxy233EKPwkJWV9YwetQovve97+H3d70eFEo6RLqQ7OwsahuNoIO6gNd5TLqucePGAWDbI+7cOvDt8HHQgarlkD2Ki4uBPQlGpHAikopJB8BFF13Mrjp4f6PXprzlULmfbPOzdrePCy+6uEuMBtRRJ510EsMPGE7Gigx8K3wMGDiAz33uc8kOKy569OjBsccdx0Kfj0Ycn5qPEydPJj8/P9mhSTsUFBRwYKhm/fNf+EKXrcVJ3f9+kTR04EEHM29HNot2+KlrdGqe08UNGDCA/MJ82B6xsBJcg2Ps2LFJi0u6nqako6Fmr3XhRCS8TaqZMGECBwwfzqtrc3HOGzb3ktF7vucr5Tn07tWTz372s0mMcv+ZGZNPnIzb7mALnDT5pJROolo66qijqAoGmQvUuiBHHqmJTVNJeKb7nj1bnxww2dLnv0UkDZx88slsqYa/LcojNyebo48+OtkhSRvMjNEjR+PbtedUaju8Wo9Ro0YlKyzpgvLy8sjOzomedISWdZXOnrEyM8770pdYU+ljya7md1g3Vfv4ZFsmZ539xaaLolQW+X89YsSIJEYSf4cccggA77X4WVJDeI6v8HNXpKRDpAs5/vjj8WdksLE6g+NPODElR9XobkaOHIntMq9zKcBOb8z4IUOGJDMs6YJ69uoZPemo9ybX69WrV2eHFDef/exnycvN4e11zZuEvrMhC58Zp59+epIii6/IJnBd+Y5yR5SVlVFUWMg2oKR3b0pKSpIdksQgEPCaNG7YsCHJkbROSYdIF5Kbm9s08dKkSZOSHI20x/Dhw3EB1zSUplUagwYP6pKd+CS5SkpKsPqqvZZbQzW5eXldclKy9srNzeXEyScxc2tOU4dy5+D9TblMmDiBvn37JjfAOIn8v+6q7eY7yswYMXIkACNVU5tyVq9aBcCnn36a3EDaoKRDpIs559xz8fl8HHzwwckORdph8ODB3otK7yljdwZDhwxNWjzSdfXt0wd/IEpH8vpqSkr6JCGi+DrppJOoaXAs2O41o1pdmcGWapg8+aQkRxY/jY2NUV+ni0Gh81nTeU1Swo4dO1gXmtdr3ief4JzbxzuSo91Jh5n91Mz6JzIYEYFLL72U1157jbKysmSHIu0QLpyt0mtiFdwd7PYFtsqL6EpKSqBut1cFEMHXUE3fPqnflGX8+PHkZGczd6uXdISfU3WY3Gjq6uqivk4X4dq2cI27pIZly5YB0Dc3m10VFWzbti3JEUUXS03HLcBqM3vBzL5oZulVryjShaRDh8vuorCwkLz8PK95VTXgoH//bn+9rfIiij59+uACjRCob7Y8o6E6LZofZWVlcdjhh7Nwpzd07sIdmYwccUBa9X1I96QjPHFjqk3g2N3t3LkTgKIsf7Ofu5pYko6jgAeB44B/AGvN7DdmpoZ/ItKtlZWVYVXW1K9DtVQqL6Lp08drQtWsX4cL4uqr0qbT7vjx49lQZeyoM5ZV+Dl0/GHJDimu0r15laSm8KAztYFgs5+7mnYnHc65Gc65bwJlwNeBJcCPgE/N7B0zu8TMuua3FBFJoH6l/fDV+rBq7+5gOty13h8qL6ILJx2+iKTD6mvAubT5mwnPT/PehizqA2i+GpFOEB4tcX1VDVlZWZSWliY5ouhi7kjunKtxzj3inDsBGAX8DjgAeBjYYGb3mNn4uEYpItKFlZSUYLUGoT7CqTrfQrypvGgunFhYs6Sjqtm6VHfAAQcA8EFodvJ0m8sicvSqdByhTs2qUtPAgQPpUVhIwMG4ceO67N/m/o5etQqYBXwKGFAAXAHMMrNpZtbt2xiISPrr3bs3wdogVENefh7Z2dn7flP3s4puXl707t0bM4uadIRrQVJdYWEhPYuLWLPbj8+MAQMGJDukuIpsttJVm7Dsj6466pG0zcwYE6pVPPDAA5McTes6lHSY2YFm9kdgPfAUMBq4FRgODAJ+CUwG/hanOEVEuqzi4mLAG8GqqLio7Y27GZUXe/j9foqKe6Z1TQdA//5eolFS0pusrKwkRxNfBQUFUV+LJFu4X9iwYcOSHEnr2l3/YmYFwAXAZcAkvPl3/wPcD0xzzkXOu36Tme0GfhbHWEVEuqSmWYoroOeI9Bmpp6NUXrSub98+bN24u+lna6giMzOLwsLCJEYVX31LS1mwcCGlpf2SHUrcRR6ndDpmkvouuugievTowdFHH53sUFoVS6OvjUAusBb4BfCgc25tG9uvDm0vIpLWwhcfVmf0KNT49qi8aFVp374sKd9CeLBVX30VvUtK0qotfa9evQDoGXpOJ003GFq8Fkm2QYMG8e1vfzvZYbQplqTjDby7VC+3uEsVlXPuKbyqdBGRtJafn9/0Wk0uAJUXrSopKcEaIptXVdN3YNccaaajwhfj6fi/ENlfKx2/n0gitTvpcM6dnchARERSVeTFR15eXhIj6RpUXrSuT58+uIY6CDRChh9/YzV906QTeVj4/yGdam+i8fn2dyyerisY3Oe9ApGYtfs/xsw+a2a/bmP9r81scnzCEhFJHTk5OU2v03FEm1ipvGhdeDhla6gG56C+Ou2GWE63zuPdSXV1NQAVFRVJjkTSUSxp+o+BtgbcHhbaRkSkW1HSsReVF61olnQE6nGBxrRLOiR1bdiwAYD169cnORJJR7EkHYcC09tY/2FoGxGRbiUy6dAcHYDKi1Y1JR31NVhDTbNlIsm2trwcgHWhZ5F4iqUjeRFQ1cb6GkBjRYpItxM5+6ualgAqL1oVHtnJGmqwhpxmy9JFuvflSFfOObZs2QLA5s2bkxyNpKNYajrWARPaWD8Bb5hEEZFuJfIiKzMzM4mRdBkqL1rRo0cPb1byhuqmmo7w5JLpRslHaqmvr6ehsZEMoKqmRp3JJe5iSTqmAZea2cktV5jZZ4FLgZfiFZiISCpS0gGovGhVRkYGBYU9sMbapqQj3Wo6nHOAko5UEz5u6TsmlyRbLM2rfgmcB7xiZi8DcwEHHAZ8Ae+u1S3xDlBEJJVENrXqxlRetKG4uJgdlTVYZi5mRo8e6TmhZPgiVlJDdnY2Pp+PhmCQnNBrkXiKZZ6OTWZ2DHAvXqFxWngV8DJwtXNuQ/xDFBFJHUo6VF7sS8+exazasQlrqCUvv4CMjIxkhySCmdG7Z0+2bNtG7zSrfZOuIabS0Tm3GjjNzHriDYdowFLn3I5EBCcikmp0AelRedG6oh49yAiW4xrr0raWQ1LTgIED2bJtGwMGDUp2KJKGOnRLLlRozIxzLCIiKU9NEppTebG3oqIir09HRh1FRemXdKgvR+rqP2AAcz/+mP79+yc7FElDHUo6zKwAKCZKfyPn3Jr9jElEJGUp6WhO5cXeCgsLoaEeX2Y9RWlc06E+HamnqKgI0NwxkhgxlY5m9lUzmw/sAlYDK6M8Ytmfz8yuM7NFZlZrZuVmdpuZ5bfz/WZmF5rZ+2a21cwqzWyBmd1kZul7JheRLktJhyfe5UU6KSgowAUbsYYaCgoKkh2OSJPw5Kaa5FQSod2lo5l9EXgcr3bkPrz2uU8AzwANwGzgFzF+/u3AH4GFwHdC+7oGeMHM2hPbrcBjeBNN/Rz4ITAv9PpVUx2viHQyJR0JKy/SRn5+6L5a3e49r9OQiuDUc9ppp3HGGWdw8sl7jXYtst9iaV71A+BTvEmdCoBvAn9zzv3XzA4C/oc3LGK7mNmBeInGc8658yKWrwTuBL6KV2i19n4/cC1e4XWKcy48i81fzKwRuAg4NJaYRET2ly60gDiXF+kmMtFIx6Qj3KxKzatST79+/fjRj36U7DAkTcVyS+4Q4O/OuVogfIGfAeCcmw/cD1wfw/4uwLv7dUeL5Q8A1cDF+3h/JpALbIxIOMLWh56rYohHRGS/KekA4l9epJW8vLyor9NFOv8PRCZSjY2NSYxEJPXEknRkANtCr2tCz0UR6xcDB8Wwv0l4hdGMyIWhQmpuaH2rnHM1wDvA583sx2Y2wsyGmtkU4NvAo865pTHEIyKy39L5gisG8S4v0kq6Jx1h6fi/UFNT0/S6srIyiZGIpJ5Yko61wBBouuDfDEyMWD+a2GoW+gNbnXN1UdatA0rMLGsf+7gIeBP4DbAUr2Pi3/D6inwthlhEROIiHS+0OiDe5UVaycnJaXqdm5ubxEgSKx2bV+3atSvqaxHZt1j6dLwPnAzcFPr538B3zawaL3m5Cnghhv3lAdESDoDaiG3q29hHHbACL0n5D95st+cBN4b28cvW3mhmVwJXAgwePDiGsEVEWqekA4h/eZFWIpOOyNfS9UXWbqimQyQ2sSQd9wDnmFlu6M7VT4EjgJtD6xfgdR5sr2qgbyvrciK2icrM8vAKttnOua9GrHrSzJ4EfmFmzzrnFkd7v3Pufrx2xUycODH9bseIiCRPvMuLtBKZaKTz0KTpmIBXVe2poNu9e3cSIxFJPe1uXuWcm+mcuyFUgOCc2+KcGw+MBw4GDnXOlcfw2evxmlBFO+MOwGt61VYtx5eAkXhDMLb0DN53+0wM8YiISBwkoLxIq3mdIhONdE460rF5VW1tbdPrurrWGmuISDTtSjrMLD90Yv5cy3XOuU+ccwuijCC1LzNDn39Ei8/KwSuYPtrH+weEnjOirPO3eBYR6RTpeHc3FgkqLyCN5nXKysqK+lq6vkAgEPW1iOxbu5IO51wVcAMwKI6f/RReH4xrWyy/Aq8vx2PhBWZWZmZjQk2qwhaGni+Nsu/wspnxCVVERNojEeVFi3mdznXOPeCc+x7wPWAy3rxObb2/5bxOdznn/hJqmvsYcCTevE6dQklH6oqc/FMTgYrEJpb/mOVAv3h9sHNuHnA3cK6ZPWdml5vZbXh3st6m+cSAv8abaCqyVuRFvOF2TzOzd8zsu2Z2rZm9A3wBeMY5Nzte8YqISLvFtbwgzeZ18vv3VMJnZmZ21sd2unSs9esuTeNEEiGWpOMe4Aoz6x3Hz78WrzPhgXgJyFeBu4Az9lX97pwL4I2O8mu8Dum/wxs6tyfwY+DCOMYpIiLtF+/yIq3mdeouSUc69umInEE+nedYEUmEWPo8VALbgcVm9ne8eTH2Gl3KOfdIe3cYShxuCz3a2m4KMCXK8kq8avwb2vuZIiKScPEuL/Y1r9MxZpa1j8FHLgL+jndz6jfhEPCGVr+ptTclWmQCIl1fYWFh1Ncism+xnO0ejnh9XSvbOKDdSYeISLpJxyYlHfBwxOt4lBdpO69TOicd6fi/0KPHnoHOioqKkhiJSOqJ5Ww3OWFRiIhIOol3eZG28zqlc9KRjgoKCppeRyYgIrJv7T7bOefeTmQgIiKSHhJQXqwHxplZdpQmVrHM63R9lHXPAF/Bm9cpatKRSBkZ0UZ9Tw/p2KcjsvZGI4+JxEbjvYmISFeXtvM6pWPSEQx2ZBoWEUl37T7Jmll7Oto559wt+xGPiIikuASUF0/hDRhyLfBuxPKo8zoBRcAa51y4yVXkvE5Pt9h3Uud1Ssd+D42NjckOQUS6oFju7NzcxjqHN4a6A5R0iIh0bze3sS7m8sI5N8/M7gauNrPngJeAsXgzkkeb1+lSvH4lb4WWNZvXCfhHKIZzgeNI4rxOqulIPf/3f/+nxEqkA2JJOoa18v4D8EYnKSL67OAiItK9JKK8uBZYhTeK1OnAVrx5nW5qz7xOZnYyXp+Oc/HmdXJ4Q/n+GG9S2qRIx5qOQCAApO+M3aecckqyQxBJSbF0JF/dyqrlZvYa3sRLX0dzZohIN5aOF5GxSkR5ka7zOqXjhXm4A3k6diQXkY6Ly9nOeWeWZ4GvxWN/IiKSnlReNJeOSUe4eZWSDhGJFM+zXRbQO477ExGR9KTyIiQda8bCyUY6fjcR6bi4JB1mNhH4LvBpPPYnIiLpSeWFiEj3FMuQuStaWdULKAQagcvjEZSIiKQulRftl861AWpeJSKRYhm9ag3eaB+RHDAbWALc75xbFae4REQkdam8aKd0TjrS+buJSOxiGb3qxATGISIiaULlRful44V5On4nEdl/6TdshoiIiCRNeEQuNa8SkUjtTjrM7Ctm9kgb6/9uZl+KT1giIqlJd3lVXsQiHf9e0vE7icj+i6Wm42qgrVlfA8B39i8cERFJAyovurFwTYeSDxGJFEvSMRaY08b6OcC4/QtHRCS16UILUHnRrWVkZABqXiUizcWSdOTj3Z1qjcMbClFERLo3lRfdWDrOsi4i+y+WM8NK4DNtrP8M3jCJIiLSvam86MaUdIhINLGcGZ4Hzjezy1quMLNvAOcDz8UrMBGRVKTmVYDKi25NSYeIRBPL5IC/Ac4G7jez64C5eFXk4/Ha5i4GfhXn+EREJPWovBARkWbafTvCOVcJHAvcB5QBFwIXAf2Be4FjnHMViQhSRERSh8oLAdX6iUhzsdR04JzbBXzbzK4CSgADtjgNUSEiIhFUXogOtYhEiinpCAsVGlviHIuIiKQZlRfdTzjZUE2HiESKZUbyq8zs9TbWv2pm/y8+YYmIpCZdaKm86O7C/wOq6RCRSLEMMTEFWNrG+iXAN/YrGhERSQdTUHnRbSnxFpFoYkk6RgLz2li/ILSNiEi3pQsuQOVFt6YaDhGJJpakIxPIaWN9zj7Wi4ikPSUdgMoLERFpIZakYwlwShvrTwWW7184IiKSBlRetFM61gqoI7mIRBNL0vEEcKqZ3WJmWeGFZpZpZj/HK0Qej3eAIiKSclReiIhIM7EMmXs78AXgp8C3zGwR3gyzY4FewLvAbXGPUEREUo3Ki25Mo1eJSDSxzEjegHd36ifAWuAw4HCgHPgRcLJzrj4RQYqIpAo1KVF50d2peZWIRBPrjOQNwO9Cj72YWbZzri4egYmISOpSeSEiIpFi6dPRKjObYGb3AOvjsT8REUlPKi/Sn5pViUg0MdV0RDKzXsDFwGXAQYDhjVgiItJtqUnJ3lRedC+BQADQ/4KINBdzTYeZfc7MngLW4XUWzAJ+DhzsnBsT5/hERFKKLrT2UHmxb+lYKxAMBoH0/G4i0nHtqukws2HA14FLgYHAFuBZ4ELgp8655xIWoYiIpAyVF6KkQ0SiabOmw8wuNLM3gKV4I458BJwDDMC7W6VbeiIiovJCmoSbV4mIRNpXTcejwArgWuBx59z28Aoz0y0MEREJU3khgGo4RCS6ffXpqAeGAmcDXzCz3IRHJCKSwrpxnw6VFwLsaV4lIhJpX0lHP7y7Vr2BqcAmM3vQzI5HVeUiIrKHygsREWlVm0mHc26nc+7PzrnDgYl4BckXgTeB9wAHFCU6SBGRVNFdazpUXkhL3fV/QUSia/eQuc652c65q4D+wCXAgtCqv5rZXDO70cwOTESQIiKSOlReCKhvh4g0F/M8Hc65Oufc4865zwIHAL8EegK/AD6Oc3wiIpKiVF7smy7MRaS7iDnpiOScW+Wcuwmv8+BpgMZfF5FuTU1KolN50X2E/wf0vyAikdo1OeC+OO9WzX9CDxGRbksXWm1TeZH+fL79up8pImlKZwYRERGJm4yMDEBNx0SkOSUdIiIiEjfhmg7V+olIJCUdIiIiSZKOtQGq6RCRaJR0iIjEke7uSncXTjpERCIp6RAREZG40ehVIhKNkg4RkTjShZZ0d+FmVWpeJSKRWh0y18xu6sD+nHPulv2IR0REUozKC4lGCbiIRGprno6bO7A/B6gQERHpXm7uwHtUXpDetQHp/N1EJHZtJR3DOi0KEZE00U3v7qq8kL100/8FEWlFq0mHc251ZwYiIiKpSeVFx6k2QES6C3UkFxERSZJ0TDrCNRzp+N1EpOPaal4VlZlNBI4EerJ30qKOgSIiAqi86O7UvEpEIrU76TCzXOA54FTA8DoBhs8oLmKZChERkW5M5YWIiLQUS/Oqm/AKkF8Ck/EKjUuBLwDvAjOBcfEOUEQklejuLqDyQlDzKhFpLpak40vAM865m4D5oWXrnHOvACcDWcCU+IYnIpJalHQACSgvzMxnZteZ2SIzqzWzcjO7zczyY9iH38yuMbPZZlZlZrtCr/9fLLHEUzpemIe/k8+nbqMiskcsZ4RBwNuh14HQcxaAc64ReAL4avxCExFJPUo6gMSUF7cDfwQWAt8BngGuAV4ws32WZWaWBbwI/B6YC1wHXB+Kc0iMscRNOiYdEydOZMCAAZx++unJDkVEupBYOpJXRmxfCQSB/hHrdwH94hSXiIikrriWF2Z2IF6i8Zxz7ryI5SuBO/ESmMf3sZv/w6tlOcU592Z7P1ti179/f5544olkhyEiXUwsNR3LgVEAzrkAsACvCh3zbu2dC5TH8uHpWl0uItLNxbu8uACvX8gdLZY/AFQDF7f15lCZ8l3gX865N81TGMPnJ0w61nSIiEQTS9LxOnCemWWEfr4P+LyZLQeW4t1BejDGz0/L6nIRkW4u3uXFJLzakhmRC51ztXjn/kn7eP9xQCEwy8z+BFQAFWa2xcx+ZWYxDx8vIiKxafNEa2bZzrm60I+/AaYSGvbQOXePmeXg3WEK4N1x+l17P1jV5SKSjrprn45Elhd4TbO2Ruw/0jrgGDPLcs7Vt/L+0aHna4F64EfANuAivBtVA/BG14rKzK4ErgQYPHhwDGHvm2o6RKS72FdtwgYzu9vMJjjndjvnFoc6AQLgnPujc+5w59wk59xvXWxnz7StLheR7qu7Jh0ktrzIA6IlHAC1Edu0Jlw29AJOds7d65x72jl3NvAW8DUza3UIX+fc/c65ic65iX369Ikh7H1T0iEi3cW+ko5dwLeAGWY218y+Y2a94vTZqi4XEUkfiSwvqoHsVtblRGzTmprQ83Tn3KIW6x4JPZ/QwdhERKQd2kw6nHPD8JovPQ6MAP4ErDOzJ83sVNu/W3r7qi4vCfXZaE1kdfl5eNXlXwHex6sub7O9sJldaWYfmdlHW7ZsiTV2ERGJkODyYj1emRAt8RiAV5a01rQKYG3oeWOUdRtCzz33I74OU02HiHQX++ys7Zz7r3PuEqAM+CZeLcSXgZeBVWb2czMb1oHPTtvqchHpvrpx86pElhcz8cqrIyIXhvqJjAc+2sf7wzXqA6OsCy/b3IG4RESkndo9epVzrjJ0oX40MBa4DcjE68y91MzeMLMLY/hsVZeLiKShBJQXTwEOr2Y70hV4N6ceCy8wszIzG2NmTTetnHMrgf8BR5jZ4RHbZoT20Qi8GkM8caOaDhHpLmIZMrdJqIPgj/DuEJ0JvAZMZs/FfnukbXW5iHRf3bmmI5p4lBfOuXnA3cC5ZvacmV1uZrfhDbn+Ns1HOvw18CktakXwRkusBl43s5vN7Duh9x4B/Mo5t6ZDX3A/KekQke6iQ0lHhCOAs4CjQz+3lSS0pOpyEZHuY3/KC/BqOX4AHIiXgHwVuAs4wzkX3NebnXNzgGOA90L7+j2QD3zdOfezGGMREZEYxTzCk5n1Ay4Bvo7Xmdvw2u0+SEQVdzs8BdyAd/J/N2J51OpyoAhY45yrBq+63Mz+hzc+++HOudmhbZNeXS4iInEtL8Izm98WerS13RRgSivrPsFLfLoM1XSISHfRrqQjNPzsWXgFx+dC79sJ3As8GLqDFBPn3Dwzuxu42syeA17Ca/t7DdGryy/Fq5J/K2L5d/ASltfN7E68yZ6+gndH7RfJqi4Xke6ruzevSkR5kc6UdIhId7GvGckPwSs4LgJ6hxa/iXeX6rlWhruNxbXAKryZXk8HtuJVl9/U3upyMzsGuDW0rxy8trxfd849vJ+xiYhIO3VCeZGWlHSISHexr5qOuaHncrwL+4ecc6vi9eHpWl0uIt1XN67pmBt6Tkh5ka6UdIhId7GvpONZvLtUrzqdGUVEpHUqL0REpFVtJh3OuS93ViAiIpK6VF50jPIzEeku9nfIXBERERERkTYp6RAREUkS1XSISHehpENERCRJlHSISHehpENERERERBJKSYeISBzpzrXEQn8vItJdKOkQEREREZGEUtIhIhJHunMtsdDfi4h0F0o6RETiSBeRIiIie1PSISIiIiIiCaWkQ0QkjoLBYLJDkBSimjER6S6UdIiIxJEuIkVERPampENERCRJlKSKSHehpENEJI50ESkiIrI3JR0iInGkpENERGRvSjpEROJISYeIiMjelHSIiMSRkg4REZG9KekQEYkjDZkrIiKyNyUdIiIiIiKSUEo6RETiSM2rRERE9qakQ0QkjtS8SkREZG9KOkRE4kg1HRILM0t2CCIinUJJh4iISJIo6RCR7kJJh4hIHKmmQ2KhpENEugslHSIicaSkQ0REZG9KOkRE4khJh4iIyN6UdIiIiCSJz6diWES6B53tREREkkR9OkSku1DSISIikiRKOkSku1DSISIikiRKOkSku1DSISIikiRKOkSku1DSISIikiTqSC4i3YXOdiIiIkmimg4R6S6UdIiIxJEuIiUW+nsRke5CSYeISBzpIlJioeZVItJd6GwnIhJHSjokFvp7EZHuQkmHiEgc6c61xCIjIyPZIYiIdAqVjiIicaQ71yIiIntT0iEiEkdKOiQWqukQke5CSYeISBwp6RAREdmbkg4RkThSnw6JhWo6RKS7UOkoIhJHSjokFqoZE5HuQqWjiEgc6SJSRERkb0o6RETiSDUdIiIie1PpKCISR6rpEBER2ZuSDhGROFLHYBERkb0p6RARiSPVdIiIiOxNSYeISBypT4eIiMjeVDqKiMSRko7EMDOfmV1nZovMrNbMys3sNjPL7+D+njYzZ2bz4x2riIjsTaWjiEgcqXlVwtwO/BFYCHwHeAa4BnjBzGIqy8zsDOA8oCbeQYqISHT+ZAcgIpJOVNMRf2Z2IF6i8Zxz7ryI5SuBO4GvAo+3c18FwD3A3cBZ8Y9WRESiUekoIhJHSjoS4gLAgDtaLH8AqAYujmFfv8S74XZjXCITEZF2UU2HiIh0dZOAIDAjcqFzrtbM5obW75OZHQFcDVzgnKtQUzgRkc6jW3IiInGkeToSoj+w1TlXF2XdOqDEzLLa2oGZ+fFqRl51zj2dgBhFRKQNqukQEZGuLg+IlnAA1EZsU9/GPn4IjATOifXDzexK4EqAwYMHx/p2ERFBNR0iInGlPh0JUQ1kt7IuJ2KbqMxsBHAT8Evn3IpYP9w5d79zbqJzbmKfPn1ifbuIiKCaDhGRuFI/gYRYD4wzs+woTawG4DW9aquW4zZgO/B8KAEJ8wNZoWVVzrkNcY1aRESa6JaciEgcKelIiJl45dURkQvNLAcYD3y0j/cPwesXsgBYGvEYgNfkailefw8REUkQ1XSIiMSRko6EeAq4AbgWeDdi+RV4fTkeCy8wszKgCFjjnAs3ufoBUBxlv/fg9Qn5HqBaDhGRBFLSISISR0o64s85N8/M7gauNrPngJeAsXgzkr9N84kBfw1cCkwG3gq9//Vo+zWzPwC7nXPPJi56EREBJR0iInGlpCNhrgVW4Y0idTqwFbgLuMk5F0xeWCIi0h5KOkRE4khJR2I45wJ4HcJv28d2U4Ap7dzn0P2NS0RE2iepHcnNzGdm15nZIjOrNbNyM7vNzPI7uL+nzcyZ2fx4xyoi0h5KOkRERPaW7NGrbgf+CCwEvgM8g9dG9wUziyk2MzsDOA+oiXeQIiLtpaRDRERkb0lrXmVmB+IlGs85586LWL4SuBP4Ks07B7a1rwK8UUjuBs6Kf7QiIm3r1asX27dvT3YYIiIiXVIy+3RcABhwR4vlDwC/AS6mnUkH8Eu873IjSjpEJAluueUWpk+fnuwwJEXceuutbNy4MdlhiIh0mmQmHZOAIDAjcqFzrtbM5obW75OZHQFcDVzgnKtQ0wYRSYaDDz6Ygw8+ONlhSIo4/vjjkx2CiEinSmafjv7AVudcXZR164ASM8tqawdm5serGXnVOfd0AmIUEREREZH9lMyajjwgWsIB3gyx4W3q29jHD4GRwDmxfriZXYk33juDBw+O9e0iIiIiItJOyazpqAayW1mXE7FNVGY2ArgJ+KVzbkWsH+6cu985N9E5N7FPnz6xvl1ERERERNopmTUd64FxZpYdpYnVALymV23VctwGbAeeDyUgYX4gK7Ssyjm3Ia5Ri4iIiIhITJJZ0zEz9PlHRC40sxxgPPDRPt4/BK9fyAJgacRjAF6Tq6V4/T1ERERERCSJklnT8RRwA3At8G7E8ivw+nI8Fl5gZmVAEbDGORducvUDoDjKfu/B6xPyPUC1HCIiIiIiSZa0pMM5N8/M7gauNrPngJeAsXgzkr9N8zk6fg1cCkwG3gq9//Vo+zWzPwC7nXPPJi56ERERERFpr2TWdIBXy7EKbxSp04GtwF3ATc65YPLCEhERERGReElq0uGcC+B1CL9tH9tNAaa0c59D9zcuERERERGJn2R2JBcRERERkW7AnHPJjiHpzGwLsDrZcSRICV6zNUktOm6pKZ2P2xDnXLef1CjO5UU6/72k83eD9P5++m6pqyt8v1bLCiUdac7MPnLOTUx2HBIbHbfUpOMmsUjnv5d0/m6Q3t9P3y11dfXvp+ZVIiIiIiKSUEo6REREREQkoZR0pL/7kx2AdIiOW2rScZNYpPPfSzp/N0jv76fvlrq69PdTnw4REREREUko1XSIiIiIiEhCKekQEREREZGEUtKRZsxslJn9wsymm9kWM6s0s7lm9lMzy092fNI6M3OtPHYnO7buzsyuN7NnzGxF6Jis2sf2o83sn2a2w8yqzOxdMzupk8KVJIr1HJxqfyuheB8zs0/NbJeZVZvZIjP7o5mVtdj25jbOaz9I1ndoSyzn4VQ7dmFm1svM/mBmy8ysNvR3+qaZHRexTSoeuwIzu8HM5oX+77aa2ftmNsXMrMW2KXfszKzUzP5iZuVmVm9ma8zsT2ZW3GK7Lnvs/Mn8cEmIbwBXAf8GHgMagMnArcCXzewo51xNEuOTtr3L3h3BGpIRiDTzK2A7MBsobmtDMzsAeB9oBH4H7AKuAF4xsy84515PbKiSZO0+B6fo38pAoAx4HliLF/vBwJXAV81svHNuc4v3XMfeE5bNSnSg+2Gf5+EUPXaY2RDgLaAAeBBYAhQBhwADorwlJY6dmfmAl4FjgL8DdwF5wAXAQ8BY4MehbVPu2JlZX+BDoD9wHzAfOAj4FnC8mR3rnKtu8baud+ycc3qk0QOYCBRFWX4r4ICrkx2jHq0eOwc8nOw49Ih6bIZHvJ4PrGpj26eBADA+YlkB3izWiwkN4KFHej5iOQen098KcH7o+/0oYtnNoWVDkx1fDN+jXefhVD12eAlVOVC2j+1S6tgBR4fivb3F8ixgBbAzlY8dcEfo+13QYvkFoeU3psKxU/OqNOOc+8g5tyvKqqdCzwd1ZjwSOzPLMrOCZMchezjnVrRnu1DzmbOAt5xzcyPevxv4KzAKmJSIGKVraO85OA3/VlaHnntGW2lmPcwsZVpXtHUeTtVjZ2bHA58Bfuec22BmmWaW1473pcKx6xF6Xh+50DlXj3e3vwpS99jh1ZbWAE+2WP4UUAt8PdqbutqxU9LRfQwMPW9KahSyL18CqoFKM9tsZneZWVGyg5J2OwTIBj6Ism566LkrFmiSeC3PwSn9t2JmOWZWYmYDzexUvCYfAC9F2fwTvCYstaE29l/otEA7Zl/n4VQ9dqeFnteY2Qt4F7FVZrbEzC5u5T2pcuxmADuBH5nZ+WY2ONRv49fABLy7/5C6xy4bqHWhqoww51wQ7zgON7OSFu/pcseuy2Q/kjhmlgHchNd+8fEkhyOtmwE8AyzDu2tzGnA1cIKZHRO6EyNdW//Q87oo68LLorWbljTWyjk41f9WLsdrNx+2CrjYOfduxLKdeH0j3gd2AKOBa4FpZvYN59zDnRFojNpzHk7VYzc69PwAsBS4FO9i9nvAVDPLdM49FNpmJyl07JxzO8zsLLzaiqcjVlUC5znn/hn6OVWP3QJgdKjP1NzwQjMbz57axcF4tTo76aLHTklH93AHcBRwg3NucZJjkVY4545ssegRM/sE+CXw3dCzdG3hpgp1UdbVtthGuo872PscnOp/K/8EFuG1hT8Mr8lKn8gNnHN3tHyTmf0Nr1/U7Wb2bFe7mdLO83CqHrvC0HMlMDnU9Agzex6v38OvzOzvzrlgKh47YDdefP/Gu+DuhTeow+NmdrZz7jVS99jdAXwReNrMrsX7ngeGljcAmYTi7srHTs2r0pyZ3YJ3l+Z+59yvkx2PxOz3QD1werIDkXYJjx6SHWVdTottpBto4xyc0n8rzrm1zrnXnXP/dM79DO+u+W/N7Pp9vG8b8Be8UeCOSXykcdHyPJyqxy48cuUT4YQDvFoCvAv1fuypDdlLVz52ZnYwXqLxmnPuh865551zD+L1YdkIPBCqcUzJYxeqQfwqXuI4Da8P1QvAm8CLoc0q2nh/lzh2SjrSmJndDNyIN1zcN5MbjXSEc64Br2Ncy7aa0jWFOzFGq54PL4tWrS9paB/n4LT6W3HOfQLMAb7djs1XhZ5T4rwW5Tycqsdubeh5Y5R1G0LPUQcCiLAq9NzVjt11eEnDM5ELnTeM7DRgCDCU1D12OOeewesbdhhwPNDfOffN0LJGvCaBbVkVek7asVPSkabM7GfAz4BHgMtbdj6S1GBmOXgnFA0AkBrm4VXbHx1l3VGh5486LxxJlnacg9PxbyUXr0nLvowMPafEeS3KeThVj92M0PPAKOvCy1rOsdJSVz124YQhI8o6f8Rzqh47AJxzAefcXOfcu865zWbWDy8JedvtPU9HS0k/dko60pCZ3YQ3UsNU4Ouh0Q2kCzOz3q2sugXvRPlCJ4YjHRRqJ/sCcKKZHRpeHhp683K8zpszWnm7pIn2nINT9W8ldJETbflkvOGAp4d+9kcbec/MBuFNaLYNrzlMl9He83CqHju8fjiVwMWRwwGbN5P8F4GlzrllqXjsgIWh5ymRC0OzdZ+N16F6eQofu72EJkS8Ey/R+mVoWZc+dqYb4OnFzK4C/gysAf4PaFnYbQp1ppIuxMxux7vL8ibesSvAGzVlMt4spJOdZpJPGjO7BK96HuA7eBNO3Rb6ebVzbmrEtiPwCq0G4Ha8drZX4M3afLpz7pXOils6Xyzn4FT8Wwl1Oi4D/ovXrjwHb0jSr+K1hT/ROTc3dLG3Eu9C91P2jKJzOd757YJQc5EuI5bzcCoeOwAzuxJveOMFwN/wzmXfwjumZzjnXk3RYzcEmI3XPOwx4H94tW5X4DWruso5d09o25Q7dqGkaAbwPN6xKcKbGHAC8FPn3K9C2xXTlY9dMmcm1CP+D+BhvJkoW3u8lewY9Yh63M4GXsFrS1qLN5HRXOAGICfZ8XX3B/BWLP9TwFjgX3hDF1YD7wEnJ/t76NEpfysxnYNT7W8F+DJeG/ny0LmqBm8Uq7uAwRHbZeMNXzoP78KnAa/fwLPAEcn+Hq18t5jOw6l27CLiPhevRqoKr+bjVeDYVD52obgPAP6O13elAS+ZeAc4N9WPHV5y+CReQlELbA/9rX6uxXZd+tippkNERERERBJKfTpERERERCShlHSIiIiIiEhCKekQEREREZGEUtIhIiIiIiIJpaRDREREREQSSkmHiIiIiIgklJIOERERERFJKCUdInFgZg+bWYcnvTGzE83MmdmUdm6/ysze6ujniYhI92ZmQ0Plzs3JjkW6ByUd0i1EXNQ7M7u8lW2cmb3Y2bGJiEh6alH2hB+1ZrbCzB4ys7H7se+bzeyLcQxXJKGUdEh39HMzy43zPq8A4r1PERFJD08Al4Qe3wGmAV8FPjSzIR3c58+AL8YlOpFO4E92ACKd7CNgInAt8Ot47dQ51wA0xGt/XYmZZQDZzrnqZMciIpKiZjvnHo1cYGZLgT8B5wK3JyUqkU6kmg7pbp4GZgE/NrPe+9rYzCaa2fNmttXM6sxssZn91Mz8LbaL2qfDzE4wsw/MrMbMNprZn8zswLba0ZrZ181sQejzVpvZj9qI73Az+6+Z7Taz7Wb2dzPrG2W7EjO728zKzaw+9Hx3y9+BmU0JxXaymf2fmS0HaoEvh9YfY2Yvh75LrZmtM7OXzOyoff0uRUSkmfWh5/rwAjP7tpm9Gjq31pvZBjN71MyGRmwzNKK8uTSy6Vbkzs1ssplNM7NtEU26HjSzkpaBmNkZZjYztN0GM/t9y3JOZH/pD0q6Gwf8GHgd+CnwvdY2NLPTgOeBZcBtwHbgaOAXwHjg/LY+yMw+A7wK7AB+A+zEu3g/to23fRMoBR4MbX8x8FszW+uce7zFtgOBN4B/AM8ChwPfACaa2aRwzYSZFQHvAyOAvwGzgcOAbwEnmdkRzrnKFvv+A5AJPABUAIvNbDTwGrAR7+7cJqBf6PscCkxv6/chItKN5UVc7OcCBwG/BLbincPDfoB3Lr0Tr8w5CLgc71x9sHNuG7AFr5nWVOBd4P6WH2Zm/w+4F1gXel4NDAbOxCs7tkZsfhrwbeAveGXE2aE4dgC/2s/vLbKHc04PPdL+AZyIl3D8IPTzq3h38IdEbOOAF0Ovc/Aurt8B/C32dV1o2xMjlj3s/Ts1225G6DOGRyzLBP4Xev/NUeJbDxRHLM/DK2A+aLHvVaHtr20ltp9ELPtlaNm3W2x7VWj5LRHLpoSWLQbyWmx/TWjdEck+nnrooYceqfCIOLdHeywAxrTYPj/KPj4b2v5HLZY74OEo2w8E6oCFkeVJxHpf6HloaB9VwNCI9QbMBzYk+/enR3o91LxKuqsfA1nALa2sPwWvxuEhoDjUPKkkdKfqpdA2p7a2czMrBSYB/3LOrQgvd17fjz+1EddDzrmdEdtX4931Ghll2wq8O1iR7gktPydi2Tl4iUvLu2H34d3tOoe93ev27sOxK/R8tpnltPEdRESkufvxypVT8GobfgyUAC9FdiR3zlUBmJnPzIpCZc7HeOffI9v5WefjlW8/jyxPIj4j2GLRP51zqyLWO+BNoJ+ZFbTzM0X2SUmHdEvOuTl4o4lcZGaHRNkkPIzh3/Au2CMfi0LrStv4iGGh58VR1kVbFrYiyrJtQLT+Jyucc3WRC0I/rwCGt4hlsXOuscW2jaFYIrcNWxJl2ZN4zdJuALaH+pL8eD9GXhER6S6WOudeDz1edM79DjgL7/z82/BGZnaSeXMwVeE1sQ2XO0VAz3Z+Vvgm1Zx2bt9auQPRyx6RDlGfDunObgS+hHfC/0KLdRZ6/iEwt5X3r29leeT7YxWIYdvWJiPs6GdH2mukqlBCc4qZHQF8Djger3/LzWZ2oXPu+Th8rohIt+Cc+9DMdgEnAZjZJLymv8uAnwArgRq8c/2TtP9GcbgMaO+EtW2VO/EoT0QAJR3SjTnnVprZvcB3zWxyi9VLQ89VzrnXO7D78J2j0VHWRVvWEQeYWZZzLnLkk2y8O2eLIrZbAYw2M39kbUdoZJJRRL/L1Srn3Ay8/iqY2SC8u2m34nW6FxGR9vMD2aHXFwIZwBeccyvDG5hZPu2v5YA9temHsacsE0k6Na+S7u5WvD4Qv22x/BVgM/ATM+vV8k1mlmtmha3t1Dm3CW9OkLPNbHjE+zKB78YjcKAH3ogjkb4dWv7PiGX/BPrgjYAS6YrQ8nYlC9GGWQTW4lX97/U7EhGR1pnZKUA+3jDusKfGoWXtwg1Ev17bTfRz77N4w/D+zMx6RPlc1V5IUqimQ7o159xWM/s9LTqUO+eqzOxreBfsi83sb3hV3sXAGLzJnM4B3mpj9z/AG2L2fTO7B68j4JfxOvhB+6u+W7Mcr1A5CK/QmoA3ZO4ivOEWw36H17HwbjM7HK9m4jDgMrw7Yr9r5+fdaGanAi/iVfsbXofIMTHsQ0SkOzrczC4Ovc4GDsS78dOA19QXvBtA1+F1Lr8fL3E4BTiE5kPchk0HTjazHwNr8PqAP+mcW2tm1wJ3A/PM7BG8IXMH4A2H+w1abzYskjBKOkTgj3g1BGWRC51zr4Ta2P4Eb76MPnjjli8PveeTtnbqnHvbzD6PN875DXhJx5PA43iFRc1+xr0WL4n5A3ABXgH1GN6wwFURcewys2OBn+N1XPw63hwbfwF+5vaeo6M1/8T7HX0ZrxN9DV7V/RV484qIiEh0F4QeAEG8jtqvAb92zs0EcM79z8zOA/4P70ZYDd7gHSfgDd/e0rfxEoufAuGa9ydD+7o3NLnrD/GGO8/G64f4BlAe7y8n0h7mjYwmIp0lVKg8C1zgnHsy2fGIiIiIJJr6dIgkiHlyWizLxJsFvZG2m2aJiIiIpA01rxJJnGxgtZk9htd3ojfwFbz2ub91zm1MZnAiIiIinUVJh0jiNADT8DruleF1vF4MXOWcuyeZgYmIiIh0JvXpEBERERGRhFKfDhERERERSSglHSIiIiIiklBKOkREREREJKGUdIiIiIiISEIp6RARERERkYRS0iEiIiIiIgn1/wHYTNm5+0uzFQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 936x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1,2, figsize=(13, 5))\n",
    "sns.violinplot(x=grid_results[\"Neighbors\"], y=grid_results[\"Val Accuracy\"], ax = axs[0])\n",
    "sns.violinplot(x=grid_results[\"Batch\"], y=grid_results[\"Val Accuracy\"], ax = axs[1])\n",
    "plt.plot()\n",
    "plt.savefig(\"figures/jung_param1.pdf\", format=\"pdf\", bbox_inches=\"tight\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "99b4ff8d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 936x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1,2,figsize=(13, 5))\n",
    "sns.violinplot(x=grid_results[\"GCN Layers\"], y=grid_results[\"Val Accuracy\"], ax = axs[0])\n",
    "sns.violinplot(x=grid_results[\"Final Embedding\"], y=grid_results[\"Val Accuracy\"], ax = axs[1])\n",
    "plt.plot()\n",
    "plt.savefig(\"figures/jung_param2.pdf\", format=\"pdf\", bbox_inches=\"tight\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cde44608",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_folders = [\"/home/groups/ConradLab/daniel/sharp_data/jung/\"]\n",
    "tools = [\"sctype\",\"scsorter\",\"scina\"]\n",
    "votes_necessary = .51\n",
    "model_file = \"configs/2_25.txt\"\n",
    "neighbors = 2\n",
    "batch_size=20\n",
    "training_epochs=150\n",
    "random_inits = 5\n",
    "counts=\"counts.csv\"\n",
    "meta=\"labels.csv\"\n",
    "meta_col = 0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "330fc557",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss in epoch 0 = 16.210896\n",
      "Loss in epoch 10 = 0.018369\n",
      "Loss in epoch 20 = 0.005205\n",
      "Loss in epoch 30 = 0.002262\n",
      "Loss in epoch 40 = 0.001475\n",
      "Loss in epoch 50 = 0.000886\n",
      "Loss in epoch 60 = 0.000512\n",
      "Loss in epoch 70 = 0.000433\n",
      "Loss in epoch 80 = 0.000277\n",
      "Loss in epoch 90 = 0.000228\n",
      "Loss in epoch 100 = 0.000140\n",
      "Loss in epoch 110 = 0.000128\n",
      "Loss in epoch 120 = 0.000096\n",
      "Loss in epoch 130 = 0.000076\n",
      "Loss in epoch 140 = 0.000060\n",
      "Loss in epoch 0 = 17.218880\n",
      "Loss in epoch 10 = 0.018071\n",
      "Loss in epoch 20 = 0.005925\n",
      "Loss in epoch 30 = 0.002656\n",
      "Loss in epoch 40 = 0.001549\n",
      "Loss in epoch 50 = 0.000966\n",
      "Loss in epoch 60 = 0.000632\n",
      "Loss in epoch 70 = 0.000405\n",
      "Loss in epoch 80 = 0.000340\n",
      "Loss in epoch 90 = 0.000252\n",
      "Loss in epoch 100 = 0.000190\n",
      "Loss in epoch 110 = 0.000137\n",
      "Loss in epoch 120 = 0.000121\n",
      "Loss in epoch 130 = 0.000085\n",
      "Loss in epoch 140 = 0.000071\n",
      "Loss in epoch 0 = 18.265646\n",
      "Loss in epoch 10 = 0.018950\n",
      "Loss in epoch 20 = 0.006333\n",
      "Loss in epoch 30 = 0.002913\n",
      "Loss in epoch 40 = 0.001669\n",
      "Loss in epoch 50 = 0.001202\n",
      "Loss in epoch 60 = 0.000595\n",
      "Loss in epoch 70 = 0.000673\n",
      "Loss in epoch 80 = 0.000322\n",
      "Loss in epoch 90 = 0.000239\n",
      "Loss in epoch 100 = 0.000216\n",
      "Loss in epoch 110 = 0.000125\n",
      "Loss in epoch 120 = 0.000116\n",
      "Loss in epoch 130 = 0.000082\n",
      "Loss in epoch 140 = 0.000067\n",
      "Loss in epoch 0 = 16.379217\n",
      "Loss in epoch 10 = 0.022757\n",
      "Loss in epoch 20 = 0.006203\n",
      "Loss in epoch 30 = 0.003051\n",
      "Loss in epoch 40 = 0.001729\n",
      "Loss in epoch 50 = 0.000885\n",
      "Loss in epoch 60 = 0.000590\n",
      "Loss in epoch 70 = 0.000570\n",
      "Loss in epoch 80 = 0.000328\n",
      "Loss in epoch 90 = 0.000256\n",
      "Loss in epoch 100 = 0.000184\n",
      "Loss in epoch 110 = 0.000173\n",
      "Loss in epoch 120 = 0.000115\n",
      "Loss in epoch 130 = 0.000094\n",
      "Loss in epoch 140 = 0.000074\n",
      "Loss in epoch 0 = 16.519316\n",
      "Loss in epoch 10 = 0.019908\n",
      "Loss in epoch 20 = 0.007118\n",
      "Loss in epoch 30 = 0.002662\n",
      "Loss in epoch 40 = 0.001469\n",
      "Loss in epoch 50 = 0.000897\n",
      "Loss in epoch 60 = 0.000572\n",
      "Loss in epoch 70 = 0.000457\n",
      "Loss in epoch 80 = 0.000282\n",
      "Loss in epoch 90 = 0.000322\n",
      "Loss in epoch 100 = 0.000189\n",
      "Loss in epoch 110 = 0.000155\n",
      "Loss in epoch 120 = 0.000094\n",
      "Loss in epoch 130 = 0.000084\n",
      "Loss in epoch 140 = 0.000072\n",
      "[0.8612716794013977, 0.8598265647888184, 0.8627167344093323, 0.8612716794013977, 0.8627167344093323]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/users/lewinsda/scSHARP/utilities.py:185: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  return float((torch.tensor(preds) == torch.tensor(real)).type(torch.FloatTensor).mean().numpy())\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>data_name</th>\n",
       "      <th>method</th>\n",
       "      <th>total_accuracy</th>\n",
       "      <th>train_accuracy</th>\n",
       "      <th>test_accuracy</th>\n",
       "      <th>total_sd</th>\n",
       "      <th>train_sd</th>\n",
       "      <th>test_sd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>jung</td>\n",
       "      <td>GCN</td>\n",
       "      <td>0.861561</td>\n",
       "      <td>0.865325</td>\n",
       "      <td>0.808696</td>\n",
       "      <td>0.001209</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.018188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>jung</td>\n",
       "      <td>Max Col.</td>\n",
       "      <td>0.807803</td>\n",
       "      <td>0.865325</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>jung</td>\n",
       "      <td>Confident Labels</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.865325</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>jung</td>\n",
       "      <td>sctype</td>\n",
       "      <td>0.848266</td>\n",
       "      <td>0.863777</td>\n",
       "      <td>0.630435</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>jung</td>\n",
       "      <td>scsorter</td>\n",
       "      <td>0.774566</td>\n",
       "      <td>0.828173</td>\n",
       "      <td>0.021739</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>jung</td>\n",
       "      <td>scina</td>\n",
       "      <td>0.539017</td>\n",
       "      <td>0.577399</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>jung</td>\n",
       "      <td>Tool Avg.</td>\n",
       "      <td>0.720617</td>\n",
       "      <td>0.756450</td>\n",
       "      <td>0.217391</td>\n",
       "      <td>0.161529</td>\n",
       "      <td>0.156081</td>\n",
       "      <td>0.357871</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  data_name            method  total_accuracy  train_accuracy  test_accuracy  \\\n",
       "0      jung               GCN        0.861561        0.865325       0.808696   \n",
       "1      jung          Max Col.        0.807803        0.865325       0.000000   \n",
       "2      jung  Confident Labels             NaN        0.865325            NaN   \n",
       "3      jung            sctype        0.848266        0.863777       0.630435   \n",
       "4      jung          scsorter        0.774566        0.828173       0.021739   \n",
       "5      jung             scina        0.539017        0.577399       0.000000   \n",
       "6      jung         Tool Avg.        0.720617        0.756450       0.217391   \n",
       "\n",
       "   total_sd  train_sd   test_sd  \n",
       "0  0.001209  0.000000  0.018188  \n",
       "1  0.000000  0.000000  0.000000  \n",
       "2  0.000000  0.000000  0.000000  \n",
       "3  0.000000  0.000000  0.000000  \n",
       "4  0.000000  0.000000  0.000000  \n",
       "5  0.000000  0.000000  0.000000  \n",
       "6  0.161529  0.156081  0.357871  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = test_model(data_folders, tools, votes_necessary, model_file, neighbors, batch_size, training_epochs, random_inits, counts=counts, meta=meta, meta_col=meta_col)\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "7c58cd60",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss in epoch 0 = 16.210825\n",
      "Loss in epoch 10 = 0.018367\n",
      "Loss in epoch 20 = 0.005205\n",
      "Loss in epoch 30 = 0.002201\n",
      "Loss in epoch 40 = 0.001476\n",
      "Loss in epoch 50 = 0.000887\n",
      "Loss in epoch 60 = 0.000513\n",
      "Loss in epoch 70 = 0.000433\n",
      "Loss in epoch 80 = 0.000277\n",
      "Loss in epoch 90 = 0.000228\n",
      "Loss in epoch 100 = 0.000140\n",
      "Loss in epoch 110 = 0.000128\n",
      "Loss in epoch 120 = 0.000096\n",
      "Loss in epoch 130 = 0.000076\n",
      "Loss in epoch 140 = 0.000060\n",
      "Loss in epoch 0 = 17.219116\n",
      "Loss in epoch 10 = 0.018071\n",
      "Loss in epoch 20 = 0.005925\n",
      "Loss in epoch 30 = 0.002656\n",
      "Loss in epoch 40 = 0.001549\n",
      "Loss in epoch 50 = 0.000966\n",
      "Loss in epoch 60 = 0.000632\n",
      "Loss in epoch 70 = 0.000404\n",
      "Loss in epoch 80 = 0.000340\n",
      "Loss in epoch 90 = 0.000252\n",
      "Loss in epoch 100 = 0.000190\n",
      "Loss in epoch 110 = 0.000137\n",
      "Loss in epoch 120 = 0.000121\n",
      "Loss in epoch 130 = 0.000085\n",
      "Loss in epoch 140 = 0.000071\n",
      "Loss in epoch 0 = 18.265821\n",
      "Loss in epoch 10 = 0.018950\n",
      "Loss in epoch 20 = 0.006333\n",
      "Loss in epoch 30 = 0.002913\n",
      "Loss in epoch 40 = 0.001667\n",
      "Loss in epoch 50 = 0.001202\n",
      "Loss in epoch 60 = 0.000595\n",
      "Loss in epoch 70 = 0.000673\n",
      "Loss in epoch 80 = 0.000321\n",
      "Loss in epoch 90 = 0.000239\n",
      "Loss in epoch 100 = 0.000216\n",
      "Loss in epoch 110 = 0.000125\n",
      "Loss in epoch 120 = 0.000116\n",
      "Loss in epoch 130 = 0.000082\n",
      "Loss in epoch 140 = 0.000067\n",
      "Loss in epoch 0 = 16.379160\n",
      "Loss in epoch 10 = 0.022757\n",
      "Loss in epoch 20 = 0.006203\n",
      "Loss in epoch 30 = 0.003051\n",
      "Loss in epoch 40 = 0.001729\n",
      "Loss in epoch 50 = 0.000885\n",
      "Loss in epoch 60 = 0.000590\n",
      "Loss in epoch 70 = 0.000570\n",
      "Loss in epoch 80 = 0.000328\n",
      "Loss in epoch 90 = 0.000256\n",
      "Loss in epoch 100 = 0.000184\n",
      "Loss in epoch 110 = 0.000173\n",
      "Loss in epoch 120 = 0.000115\n",
      "Loss in epoch 130 = 0.000094\n",
      "Loss in epoch 140 = 0.000074\n",
      "Loss in epoch 0 = 16.519308\n",
      "Loss in epoch 10 = 0.019908\n",
      "Loss in epoch 20 = 0.007118\n",
      "Loss in epoch 30 = 0.002662\n",
      "Loss in epoch 40 = 0.001469\n",
      "Loss in epoch 50 = 0.000897\n",
      "Loss in epoch 60 = 0.000572\n",
      "Loss in epoch 70 = 0.000457\n",
      "Loss in epoch 80 = 0.000282\n",
      "Loss in epoch 90 = 0.000322\n",
      "Loss in epoch 100 = 0.000189\n",
      "Loss in epoch 110 = 0.000155\n",
      "Loss in epoch 120 = 0.000094\n",
      "Loss in epoch 130 = 0.000084\n",
      "Loss in epoch 140 = 0.000072\n",
      "[0.8612716794013977, 0.8598265647888184, 0.8627167344093323, 0.8612716794013977, 0.8627167344093323]\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/users/lewinsda/scSHARP/utilities.py:185: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n",
      "  return float((torch.tensor(preds) == torch.tensor(real)).type(torch.FloatTensor).mean().numpy())\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>data_name</th>\n",
       "      <th>method</th>\n",
       "      <th>total_accuracy</th>\n",
       "      <th>train_accuracy</th>\n",
       "      <th>test_accuracy</th>\n",
       "      <th>total_sd</th>\n",
       "      <th>train_sd</th>\n",
       "      <th>test_sd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>jung</td>\n",
       "      <td>GCN</td>\n",
       "      <td>0.861561</td>\n",
       "      <td>0.865325</td>\n",
       "      <td>0.808696</td>\n",
       "      <td>0.001209</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.018188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>jung</td>\n",
       "      <td>Max Col.</td>\n",
       "      <td>0.807803</td>\n",
       "      <td>0.865325</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>jung</td>\n",
       "      <td>Confident Labels</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.865325</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>jung</td>\n",
       "      <td>sctype</td>\n",
       "      <td>0.848266</td>\n",
       "      <td>0.863777</td>\n",
       "      <td>0.630435</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>jung</td>\n",
       "      <td>scsorter</td>\n",
       "      <td>0.774566</td>\n",
       "      <td>0.828173</td>\n",
       "      <td>0.021739</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>jung</td>\n",
       "      <td>scina</td>\n",
       "      <td>0.539017</td>\n",
       "      <td>0.577399</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>jung</td>\n",
       "      <td>Tool Avg.</td>\n",
       "      <td>0.720617</td>\n",
       "      <td>0.756450</td>\n",
       "      <td>0.217391</td>\n",
       "      <td>0.161529</td>\n",
       "      <td>0.156081</td>\n",
       "      <td>0.357871</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  data_name            method  total_accuracy  train_accuracy  test_accuracy  \\\n",
       "0      jung               GCN        0.861561        0.865325       0.808696   \n",
       "1      jung          Max Col.        0.807803        0.865325       0.000000   \n",
       "2      jung  Confident Labels             NaN        0.865325            NaN   \n",
       "3      jung            sctype        0.848266        0.863777       0.630435   \n",
       "4      jung          scsorter        0.774566        0.828173       0.021739   \n",
       "5      jung             scina        0.539017        0.577399       0.000000   \n",
       "6      jung         Tool Avg.        0.720617        0.756450       0.217391   \n",
       "\n",
       "   total_sd  train_sd   test_sd  \n",
       "0  0.001209  0.000000  0.018188  \n",
       "1  0.000000  0.000000  0.000000  \n",
       "2  0.000000  0.000000  0.000000  \n",
       "3  0.000000  0.000000  0.000000  \n",
       "4  0.000000  0.000000  0.000000  \n",
       "5  0.000000  0.000000  0.000000  \n",
       "6  0.161529  0.156081  0.357871  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = test_model(data_folders, tools, votes_necessary, model_file, neighbors, batch_size, training_epochs, random_inits, counts=counts, meta=meta, meta_col=meta_col)\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "14293e85",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0, 1.0)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1080x504 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "to_plot = results.loc[results['method']!=\"Confident Labels\",:]\n",
    "fig, ax = plt.subplots(1,2,figsize=(15, 7))\n",
    "ax[0].bar(to_plot['method'],  to_plot['test_accuracy'], yerr= to_plot['test_sd'], align='center')\n",
    "ax[0].set_xlabel(\"Tool\")\n",
    "ax[0].set_ylabel(\"Accuracy on Unconfident Nodes\")\n",
    "ax[0].set_title(\"Test Accuracy by Method\")\n",
    "ax[1].bar(to_plot['method'],  to_plot['total_accuracy'], yerr= to_plot['total_sd'], align='center')\n",
    "ax[1].set_xlabel(\"Tool\")\n",
    "ax[1].set_ylabel(\"Accuracy on All Nodes\")\n",
    "ax[1].set_title(\"Total Accuracy by Method\")\n",
    "ax[0].set_ylim([0, 1])\n",
    "ax[1].set_ylim([0, 1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bf302f66",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['spc', 'spd', 'spg'], dtype='object')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "real_labels = pd.read_csv(\"/home/groups/ConradLab/daniel/sharp_data/jung/labels.csv\", index_col=0).iloc[:,0]\n",
    "real_labels,keys = pd.factorize(real_labels, sort=True)\n",
    "keys"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "8c4012c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "244"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(real_labels[keep_cells][real_labels[keep_cells]==0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d8e1e1f6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "4c1f643c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1192"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(real_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "863edc46",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_path = \"/home/groups/ConradLab/daniel/sharp_data/jung/counts.csv\"\n",
    "tool_preds = \"/home/groups/ConradLab/daniel/sharp_data/jung/preds.csv\"\n",
    "tool_list = [\"scina\", \"scsorter\", \"sctype\"]\n",
    "marker_path = \"/home/groups/ConradLab/daniel/sharp_data/jung/markers.txt\"\n",
    "neighbors=2\n",
    "config=\"configs/2_25.txt\"\n",
    "sharp = scSHARP(data_path, tool_preds, tool_list, marker_path, neighbors, config)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9969967",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loss in epoch 0 = 16.796789\n",
      "Loss in epoch 10 = 0.020264\n",
      "Loss in epoch 20 = 0.005037\n",
      "Loss in epoch 30 = 0.002458\n",
      "Loss in epoch 40 = 0.001600\n",
      "Loss in epoch 50 = 0.000825\n",
      "Loss in epoch 60 = 0.000617\n",
      "Loss in epoch 70 = 0.000485\n",
      "Loss in epoch 80 = 0.000300\n",
      "Loss in epoch 90 = 0.000252\n",
      "Loss in epoch 100 = 0.000175\n",
      "Loss in epoch 110 = 0.000128\n",
      "Loss in epoch 120 = 0.000157\n",
      "Loss in epoch 130 = 0.000080\n",
      "Loss in epoch 140 = 0.000076\n"
     ]
    }
   ],
   "source": [
    "preds, train_nodes, test_nodes, keep_cells = sharp.run_prediction(training_epochs=150, thresh=0.51, batch_size=20, seed=8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "1f0c67f0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.8627167344093323,\n",
       " array([[160,  80,   4],\n",
       "        [ 10, 146,   0],\n",
       "        [  1,   0, 291]]),\n",
       " 0.8653250932693481,\n",
       " array([[136,  74,   2],\n",
       "        [ 10, 142,   0],\n",
       "        [  1,   0, 281]]),\n",
       " 0.8260869383811951,\n",
       " array([[24,  6,  2],\n",
       "        [ 0,  4,  0],\n",
       "        [ 0,  0, 10]]))"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results = utilities.validation_metrics(torch.tensor(real_labels[keep_cells]), preds.cpu(), train_nodes, test_nodes)\n",
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "a1610964",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "d = ConfusionMatrixDisplay(results[1], display_labels = keys)\n",
    "d.plot()\n",
    "#plt.show()\n",
    "plt.savefig('figures/jung_all_cm.pdf')  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "ff295fe1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "d = ConfusionMatrixDisplay(results[3], display_labels = keys)\n",
    "d.plot()\n",
    "#plt.show()\n",
    "plt.savefig('figures/jung_train_cm.pdf') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "fd60e087",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "d = ConfusionMatrixDisplay(results[5], display_labels = keys)\n",
    "d.plot()\n",
    "#plt.show()\n",
    "plt.savefig('figures/jung_test_cm.pdf') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "0bceeb1d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "46"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(test_nodes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "082d4fe3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "24"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.count_nonzero(preds.cpu()[test_nodes] == 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "bae367c6",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "_,marker_names = utilities.read_marker_file(\"/home/groups/ConradLab/daniel/sharp_data/jung/markers.txt\")\n",
    "all_labels = pd.read_csv(\"/home/groups/ConradLab/daniel/sharp_data/jung/preds.csv\", index_col=0)\n",
    "all_labels_factored = utilities.factorize_df(all_labels, marker_names)\n",
    "encoded_labels = utilities.encode_predictions(all_labels_factored)\n",
    "#encoded_labels[test_nodes,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "90e41573",
   "metadata": {},
   "outputs": [],
   "source": [
    "pd.Series(preds.cpu().numpy()).to_csv(\"/home/groups/ConradLab/daniel/sharp_data/jung/sharp_preds.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2a0e4cfa",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/users/lewinsda/.conda/envs/daniel_thesis_2/lib/python3.9/site-packages/captum/_utils/gradient.py:57: UserWarning: Input Tensor 0 did not already require gradients, required_grads has been set automatically.\n",
      "  warnings.warn(\n",
      "/home/users/lewinsda/.conda/envs/daniel_thesis_2/lib/python3.9/site-packages/captum/attr/_core/deep_lift.py:336: UserWarning: Setting forward, backward hooks and attributes on non-linear\n",
      "               activations. The hooks and attributes will be removed\n",
      "            after the attribution is finished\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Ldhc</th>\n",
       "      <td>0.351632</td>\n",
       "      <td>23.709996</td>\n",
       "      <td>4.615430</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ubb</th>\n",
       "      <td>2.220421</td>\n",
       "      <td>21.834673</td>\n",
       "      <td>8.753378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fabp9</th>\n",
       "      <td>0.258119</td>\n",
       "      <td>21.452827</td>\n",
       "      <td>3.565026</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pabpc1</th>\n",
       "      <td>3.990908</td>\n",
       "      <td>20.404309</td>\n",
       "      <td>9.974965</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             spg        spc       spd\n",
       "Ldhc    0.351632  23.709996  4.615430\n",
       "Ubb     2.220421  21.834673  8.753378\n",
       "Fabp9   0.258119  21.452827  3.565026\n",
       "Pabpc1  3.990908  20.404309  9.974965"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "int_df = sharp.run_interpretation()\n",
    "\n",
    "int_df.columns = keys # labels come from the mask used for training on real world datasets\n",
    "reorg_keys = [\"spg\",\"spc\",\"spd\"] # These keys are cell types. It is normal to only have a few different cell types in a large dataset\n",
    "int_df = int_df[reorg_keys]\n",
    "int_df = int_df.abs()\n",
    "scale_int_df = pd.DataFrame(preprocessing.scale(int_df, with_mean=False)) # could make some of these transforms optional\n",
    "scale_int_df.columns = int_df.columns\n",
    "scale_int_df.index = int_df.index\n",
    "scale_int_df.sort_values(\"spc\", ascending=False).head(4)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "40cdfe1a",
   "metadata": {},
   "outputs": [],
   "source": [
    "scale_int_df.to_csv(\"jung_interpretation.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "a8c25f7a",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqgAAAH0CAYAAADxHN9NAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABCCElEQVR4nO3de1hVZf7//9cG3JgHxLOkpoaJqKmlwlhZhn3KA4rH0cjRtLJ0xFIpD5mn1MQxndDMLK+0r1amqYh5aBgqq3FQ06aDqeWp8AweEOS89++Pfu3JQYGtbNda2+djrn1dct9r3eu9+vCxd+/7sG1Op9MpAAAAwCR8jA4AAAAA+CMSVAAAAJgKCSoAAABMhQQVAAAApkKCCgAAAFMhQQUAAICp+BkdgBVkPPWw0SEAboveWs7oEAC3Bdr8jQ4BcNuKo2uNDkH5aYc8Mm65Grd7ZNySkKACAABYnaPQ6AjKFFP8AAAAMBUqqAAAAFbndBgdQZmiggoAAABToYIKAABgdQ4qqAAAAIDHUEEFAACwOCdrUAEAAADPoYIKAABgdV62BpUEFQAAwOq8bIrfkAQ1NTVVX331lfr373/Va/7yl7/o+PHjqlSpknJychQVFaURI0Zc0/Nef/11bdq0Sb6+vvLz89Po0aPVoUOHaw0fAAAAHmRIgnrs2DGtWrWq2ARVkiZNmqQHH3xQp0+fVteuXXXvvfeqVatWbj2rsLBQLVu21NChQ3XLLbdo3759GjhwoL788kuVL1/+el4DAADAHPiq06sLCQnRG2+8oT59+qhTp07avn27Xn31VfXs2VORkZE6ePCgJGn69Ok6ePCgoqKiNGrUqBLHrVWrlho1aqTjx49LklJSUhQVFaXJkyere/fu6tGjh2vs3/tefvll/fnPf9a2bdvUoUMH3XLLLa4YnU6nzp8/X5avDgAAgDJS5rv4AwIC9NFHHyk2NlYjRoxQmzZttH79ekVFRemNN96QJE2ePFnBwcFKSEhQfHx8iWMePnxY58+fV3h4uKvt559/1oABA5SYmKguXbpo0aJFrr4DBw4oMjJSH374oR588MHLxlq/fr1uu+021alTp4zeGAAAwGBOh2c+BinzBLVLly6SpObNm0uSOnbsKElq0aKFfvnlF7fGmjFjhrp166auXbvq8ccfV7Vq1Vx9jRo1UrNmzSRJrVu31q+//urqa9Cgge66664i4+3YsUOvvfaaXn31VbfiAAAAwI1T5mtQ/f39JUk+Pj6y2+2udh8fHxUUFFzxni+++EJz586VJHXv3l1PPvmkpP+uQf366681dOhQtW3bViEhIZJU7NgVKlQo8ow9e/bo+eef16JFi3T77bdf51sCAACYCMdMXb9KlSopMzPT9XOHDh2K3VXfpk0bRUdHKz4+Xq+//rrbz/v22281evRoxcfHuyq7AAAA3oJvkioDISEhatSokSIjI0u1SUqShg8frl27dunHH390+3nTpk1TTk6OJk+erKioKEVFRWn//v1ujwMAAADPszmdTqfRQZhdxlMPGx0C4LboreWMDgFwW6DN3+gQALetOLrW6BCU+9O/PDKu/x33eGTckhhSQQUAAACuhgQVAADA6kx0zNTChQsVEhKiAwcOSPrtuND+/fvrkUceUf/+/XXkyJESxyBBBQAAQJn44Ycf9M033+jWW291tU2ZMkXR0dHaunWroqOjNXny5BLHIUEFAACwOkehRz4ZGRlKTU0t8snIyCgSQl5enqZPn64pU6bIZrNJktLT07V3715FRkZKkiIjI7V3716dPXu22Ncx5JgpAAAAlCEPHTO1fPlyLVy4sEj7yJEjFRMTc1nba6+9ph49eqh+/fquthMnTqh27dry9fWVJPn6+qpWrVo6ceLEZV/A9L9IUAEAAHBFgwcPVq9evYq0BwQEXPbznj179N133yk2NrZMnkuCCgAAYHUe+iapgICAIsnolezcuVOHDh1Sp06dJEknT57UE088oQkTJujUqVMqLCyUr6+vCgsLdfr0aQUFBRU7HmtQAQAAcF2GDRumL7/8UsnJyUpOTladOnW0dOlSde3aVaGhodq4caMkaePGjQoNDS12el+iggoAAGB9Jv6q06lTp2r8+PFatGiRAgICFBcXV+I9JKgAAAAoU8nJya4/BwcHa/Xq1W7dT4JaCv9JLHntBWA2W89uNzoEwG189zasaIXRAUgeW4NqFBJUAAAAi3M6C40OoUyxSQoAAACmQgUVAADA6ky8SepaUEEFAACAqVBBBQAAsDov2yRFBRUAAACmQgUVAADA6rxsDSoJKgAAgNU5OGYKAAAA8BgqqAAAAFbnZVP8lq6gRkREKDIyUo4/7FyLiIjQgQMHrnrP+PHjtWKFKb6UDAAAAFdg6QRVki5duqSEhASjwwAAADCOw+GZj0Esn6COHDlSCxYsUF5e3mXtp06dUkxMjLp3767u3bvrzTffNChCAAAAuMPya1BbtGihFi1a6P3339fgwYNd7bGxsXrggQe0YMECSdLZs2eNChEAAMCzWINqPs8995zeeustZWVludr27Nmjxx9/3PVztWrVDIgMAADgBmCK33xuv/12PfDAA3rnnXeMDgUAAADXySsSVEmKiYnRe++956qi3nXXXVq2bJmrnyl+AADgtaigmlOdOnUUFRWl8+fPS5Lmzp2r3bt3KzIyUj169NCaNWuMDRAAAAClYnM6nU6jgzC7L+r0NToEwG0RZ7cbHQLgNv6FBCsqyDtmdAjK3rbMI+Pecv/jHhm3JF5TQQUAAIB3sPwxUwAAADc9A9eLegIJKgAAgNVxDioAAADgOVRQAQAArM7LpvipoAIAAMBUqKACAABYHWtQAQAAAM+hggoAAGB1XrYGlQQVAADA6rxsip8EtRSynPxjgvX4+vgaHQIAANeEzAsAAMDqvGyKn01SAAAAMBUqqAAAAFZHBRUAAADwHCqoAAAAVscufgAAAJgKU/wAAACA51BBBQAAsDovm+KnggoAAABToYIKAABgdTfbGtSIiAgdOHDgsrbevXsrJSXlmh74zTffqH///urevbv69OmjH374wdWXlpamoUOH6pFHHlGPHj30n//8p8TxUlNTFR4eftX+sWPH6r777lNISIiysrKuKWYAAADcODd0it/pdComJkaxsbFKTEzUhAkTFBsbK6fTKUl69dVX1bZtW23dulWTJ0++rO9a9e3bVwkJCWURPgAAgDk5HZ75GOS6pvhXrVqlZcuWyW63y+Fw6O9//7uCg4MVERGhbt26affu3Tp9+rQGDx6sgQMH6ty5c7p48aLatWsnSWrbtq1OnTqlH374QS1atNCWLVv0z3/+09Xn7++v7777Ti1btlRcXJx27Nih/Px8Va1aVbNmzVLdunVdscTFxWnnzp3Kzc3VlClT1LZtW0lS+/btr+cVAQAAzM/LpvhLlaCOGjVK/v7+rp+PHDkiSZozZ442btyooKAg5eXlqbCw0HVNWlqaVq5cqbS0NPXs2VNt27ZV06ZNVbVqVSUlJemhhx5ScnKysrKydPz4cdWtW1dOp1PVqlVzjREUFKSTJ0+qZcuWeuqppzRu3DhJ0urVqzV37lzNnz9fknT+/HmFhIRo3Lhx2rFjh8aMGaOkpCTZ7fbr/gcEAACAko0YMUKpqany8fFRhQoV9NJLLyk0NFQRERGy2+2uXDI2NlYdOnQodqxSJajx8fFq0qSJ6+fevXtLkv70pz9pwoQJ6tSpkzp27Kj69eu7runbt68kqUaNGurYsaN27Nihpk2bauHChfrb3/6m119/Xa1atVLjxo3l51dyGNu2bdN7772nS5cuqaCg4LK+cuXKqUePHpKksLAwlS9fXocOHVLTpk1L83oAAADWZoIKalxcnCpXrixJSkpK0sSJE7Vu3TpJRXPJklzXFP/ChQv13Xff6d///rcGDRqkqVOn6oEHHihyndPplM1mkyQ1b95cy5YtkyTl5eXp3nvvVXBwsKpWrSpJOnv2rKuKeuLECdWpU0fHjh3TK6+8ojVr1qh+/fravXu3YmNjrxrXH58HAAAAz/s9OZWkzMzM68rFrjlBLSws1K+//qqWLVuqZcuW+uWXX/Tjjz+6EtR169apTZs2Onv2rLZt26ZBgwZJks6cOaOaNWtKkpYsWaJ27dqpQYMGkqTOnTvrgw8+0IgRI7Rr1y7l5OSoRYsW+umnn1SuXDnVrFlTDodDH3zwwWWx5OfnKzExUVFRUdq1a5dyc3PVqFGja301AAAAa7nOTeVXk5GRoYyMjCLtAQEBCggIKNL+4osv6quvvpLT6dTbb7/tav9943ubNm00ZsyYK977R9eVoI4fP14XL16UzWZTUFCQxo4d6+oPCgpSdHS0zpw5o6efflohISGSfttYlZiYKIfDoRYtWmjWrFmue8aOHavnn39e69evl7+/v+bMmSMfHx+FhISoc+fO6tatm2699Va1a9dOu3btct0XGBioo0ePql+/fsrJydG8efNc609Hjhypb7/9VtJvCXCTJk20dOnSa31tAACAm8by5cu1cOHCIu0jR45UTExMkfaZM2dKktavX685c+borbfe0sqVK137lWbOnKnp06dr7ty5xT7X5rzec5yuICIiQosXL3ZrrYGZbak9wOgQALf1vPAvo0MAgJtCTs4vRoeg7PeneGTc/G5j3aqg/lHLli31+eefu5ZxStL+/fs1fPhwJScnF3sv3yQFAACAKypNIipJWVlZysjIUFBQkCQpOTlZVapUkb+/vy5evKjKlSvL6XRq06ZNCg0NLXE8jySoJWXF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y5YtU05OjiQpMzPzimtJw8PDtX79eknShQsX9M9//tPjMQMAAOC/4uLiFBERoZCQEB04cMDVHhERoc6dOysqKkpRUVH64osvShzLFBVUSerfv3+RtmHDhmnhwoXq27evbDabbDabRo4cqeDg4Muu++tf/6oJEyaoW7duqlu3ru6++25VqlRJkpSamqro6Gjl5OQoNzdX999/v2JiYtSvX78b8l4AAACeZoZd/J06ddKgQYP02GOPFemLj493bYIvDUMT1OTk5Cu2z5492/Xn0aNHa/To0cVec8stt2jevHny9/dXZmamHn30UfXq1UuSVK9ePW3btq2MIwcAADAPTyWoGRkZysjIKNIeEBCggICAy9ratm1bZs81TQX1emRkZOipp55SYWGhcnNzFRkZqXvuucfosAAAACxt+fLlWrhwYZH2kSNHKiYmptTjxMbGyul0qk2bNhozZkyR5PZ/eUWCWr16da1du9boMAAAAAzhqSOhBg8e7JqV/qOSEsw/WrlypYKCgpSXl6eZM2dq+vTpmjt3brH3eEWCCgAAgLJ3pal8dwUFBUmS7Ha7oqOjNXz48BLvIUEFAACwOLMeM3Xp0iUVFhaqcuXKcjqd2rRpk0JDQ0u8jwQVAAAA123GjBn65JNPlJaWpiFDhigwMFCLFy9WTEyMCgsL5XA4FBwcrClTppQ4FgkqAACAxZnhmKlJkya5vtnzj34/q94dpjioHwAAAPgdFVQAAACL89QufqOQoAIAAFicw8tSVBJUwEu9U+6c0SEAbvvH7iVGhwDABEhQAQAALM4Mm6TKEpukAAAAYCpUUAEAACzOu1agUkEFAACAyVBBBQAAsDhvW4NKggoAAGBxDpvREZQtpvgBAABgKlRQAQAALM7bDuqnggoAAABToYIKAABgcd5VP6WCCgAAAJMxVQW1X79+ysvLU35+vo4cOaI77rhDktSsWTO98sorbo+Xl5en4cOH6/vvv5ckpaSklGm8AAAAZsAxUx60evVqSVJqaqr69OmjhISE6xrPx8dHTzzxhKpWrarHH3+8DCIEAAAwH2/bJGWqBPVqUlJSNGvWLLVq1Up79uyRzWbT/PnzFRwcrJSUFM2cOVPNmzfXvn375Ovrq9mzZ6tx48by8/PTPffco9TUVKNfAQAAAKVkmTWoP//8swYMGKDExER16dJFixYtcvXt379f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9NNPFRUVpbZt22rAgAHat29fmcQFAFZEggrAK+zZs0e5ubn6v//7v6te8+677yopKUkrVqzQF198oSpVqriqoderV69e2rhxoxwOhyTp7Nmz2r59uyIjI13XJCYmaunSpfrHP/6hw4cPa9GiRZKkH374QRMnTtT06dOVkpKi/v37a8SIEcrLyyuT2ADAakhQAXiF8+fPq2rVqvLzu/rKpVWrVmn06NGqU6eO7Ha7Ro4cqa1bt7o2Rl2Pli1bqnLlytq+fbskadOmTQoLC1ONGjVc1zz22GMKCgpSYGCghg8fro8//liS9OGHH6p///5q1aqVfH191atXL5UrV07ffPPNdccFAFbEGlQAXiEwMFDnzp1TQUHBVZPU48eP669//at8fP773+Y+Pj5KT08vkxh69eqlDRs26N5779WGDRs0aNCgy/qDgoJcf7711lt1+vRpV1zr16/XihUrXP35+fmufgC42ZCgAvAKd911l/z9/ZWUlKTOnTtf8Zo6depo1qxZatOmTZG+1NTU646hR48eioyM1L59+3Tw4EE99NBDl/WfOHHC9efjx4+rVq1akn5LXJ955hkNHz78umMAAG/AFD8Ar1C5cmWNGjVK06dPV1JSkrKzs5Wfn6/PP/9cc+bMkSQ9+uij+vvf/65jx45J+m2daFJSUpnFUKdOHd155516/vnn9fDDD6t8+fKX9b/33ns6efKkzp8/79owJUn9+vXTBx98oP/85z9yOp26dOmSPvvsM2VmZpZZbABgJVRQAXiNIUOGqHr16lq0aJFiY2NVsWJFNW/eXM8884wkadCgQXI6nRo6dKhOnz6t6tWrq2vXrkUqndejZ8+eeuGFF/Tiiy8W6YuMjHQ9u1OnTq6K6Z133qmXX35Z06dP19GjR1W+fHndfffdZXY0FgBYjc3pdDqNDgIAvMXOnTv1/PPPKzk5+bK1rhEREZoxY4buueceA6MDAGtgih8Aykh+fr7effdd9e3b97LkFADgHv4GBYAycPDgQbVr105nzpzR448/bnQ4AGBpTPEDAADAVKigAgAAwFRIUAEAAGAqJKgAAAAwFRJUAAAAmAoJKgAAAEyFBBUAAACm8v8BKDhVG77vwUoAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 842.4x595.44 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "markers = [\"mt-Rnr2\", \"Ncl\", \"Hsp90ab1\", \"Dazl\", \"Prrc2c\", \"Ldhc\", \"Ubb\", \"Fabp9\", \"Pabpc1\", \"Meig1\", \"Tnp1\", \"Smcp\", \"Tsga8\", \"Dbil5\", \"Gm9999\"] # manually selected markers for visualization. These are basically the markers which have the highest DEEPlift correlation\n",
    "sns.set(rc={'figure.figsize':(11.7,8.27)})\n",
    "#scale_int_df = np.arcsinh(scale_int_df)\n",
    "ax = sns.heatmap(scale_int_df.loc[markers,:])\n",
    "ax.set(xlabel=\"Cell Type\")\n",
    "plt.plot()\n",
    "plt.savefig(\"figures/jung_att_heatmap.pdf\", format=\"pdf\", bbox_inches=\"tight\")\n",
    "plt.show()\n",
    "#ax.savefig(\"jung_att_heatmap.pdf\", format=\"pdf\", bbox_inches=\"tight\")\n",
    "#ax.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "ce8aff7e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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fftin581a5batWunTZs26eWXX9aYMWNkGG548wIAAICbqHCTGR0drcTEREnS6dOndfnyZYWEhPzmOVOnTtXRo0cVFRVVlG62bNlSDRs2vObnP/30U8XExEiS2rVrJ29vbx08eLCipQMAALgEhxNfVqlwkxkeHq7Dhw8rOztbq1evVr9+/Uo85+WXX1bjxo2VlJSkOXPm/OZns7KyZBiGgoKCio7Vrl1b586dq2jpAAAAcJIKN5k2m009e/bU+vXrtWHDBvXu3duMugAAAG4a3JN5Hf3799ecOXMUEhKiatWqmTFkkf+Ml5mZWXTs7NmzqlWrlqnXAQAAgHlMaTLr16+vF154Qc8880ypPu/v76/c3NxSj9+jRw+tWLFCkrR37179/PPPatGiRblqBQAAcDXueE+maftkPvzww6X+bGhoqO644w716dNHjRo10pw5c/Tuu+/qww8/VGZmpsaPHy9vb29t2LBB/v7+Gj16tF566SWtWbNG3t7eeuONN+ThwT7yAADAPVjZDDqLzbgJ9gLy9qlvdQlAmfULbmt1CUC5rD631+oSgDLLzztj6fU3BMc4bexe51c4bezfwhN/AAAALGblAh1nYc4ZAAAApiPJBAAAsJjD/YJMkkwAAACYjyQTAADAYg43vCeTJhMAAMBi7rjVD9PlAAAAMB1JJgAAgMXccTN2kkwAAACYjiQTAADAYg6b+y38IckEAACA6UgyAQAALOaOq8tpMgEAACzmjgt/boom0+Fwx/90cHefZx2yugSgXByGO2YyAMrqpmgyAQAAXBnPLgcAAABKgSQTAADAYu747HKSTAAAAJiOJBMAAMBi7rhcjiYTAADAYiz8AQAAAEqBJBMAAMBi7rijN0kmAAAATEeSCQAAYDF3XPhDkgkAAADTkWQCAABYzFVWl+fl5Wn69OnatWuXvL291bp1a7366qvlGosmEwAAwGKusvDnz3/+s7y9vbVp0ybZbDZlZGSUeyyaTAAAADeWk5OjnJycYscDAgIUEBBQ9POlS5e0Zs0abdu2TTbbL9HqbbfdVu7rmnZPZnZ2tu6880699tpr5R4jNDRUly5dMqskAACAG4LDia/FixerS5cuxV6LFy++qobTp08rMDBQc+fOVf/+/TV48GDt3bu33N/JtCQzOTlZrVu31vr16/XSSy/JbreX+twrV67Iy4tQFQAA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fH19VaVKFUVERGjcuHGSfnkSysKFC9W1a1eFh4frueee048//mjK9adMmaIZM2Zcdezpp5/WBx98IEmKiIjQggUL1KtXL7Vv314TJky46tnSW7duVVRUlNq1a6eYmBilpqaaUhcA3KhoMgG4hP379ysvL09//OMfr/uZDz/8UJs3b9aSJUu0Y8cO3XrrrUWpZEVFR0dr3bp1cjgckqTMzEzt2rVLffr0KfpMcnKy3nvvPf3tb3/T8ePHNW/ePEnSt99+q4kTJ2rq1KlKSUnRww8/rGeeeYbnnwO4qdFkAnAJP/74o6pVqyYvr+vfxfPxxx/rhRdeUK1atWS32xUbG6tNmzYVLfapiJYtW6pq1aratWuXJGnDhg3q0KHDVc8vHzRokGrXrq3AwECNHDlS69evlyT99a9/1cMPP6xWrVrJ09NT0dHRqlKlig4cOFDhugDgRsU9mQBcQmBgoLKysnTlypXrNpo//PCDnn32WXl4/Pf/H3t4eOjChQum1BAdHa21a9fq97//vdauXavHHnvsqvdr165d9Oc6deooPT29qK41a9ZoyZIlRe8XFBQUvQ8ANyOaTAAuoU2bNvL29tbmzZvVo0ePa36mVq1amj59utq2bVvsvTNnzlS4hsjISPXp00epqak6evSounbtetX7Z8+eLfrzDz/8oJo1a0r6pfl8+umnNXLkyArXAADugulyAC6hatWqiouL09SpU7V582ZdvnxZBQUF2rZtm9544w1J0sCBA/Xmm28qLS1N0i/3TW7evNm0GmrVqqU777xTL730krp16yYfH5+r3l+2bJnOnTunH3/8sWgRkCQNGDBAK1as0DfffCPDMPTTTz/piy++UG5urmm1AcCNhiQTgMsYNmyYqlevrnnz5mnMmDHy8/NT8+bN9fTTT0uSHnvsMRmGoccff1zp6emqXr26evXqVSxxrIh+/fpp7NixmjRpUrH3+vTpU3TtLl26FCWXd955p1599VVNnTpVJ0+elI+Pj+666y7Ttl0CgBuRzTAMw+oiAMBVfP3113rppZe0ZcuWq+79jIiI0LRp03TPPfdYWB0A3DiYLgeA/6+goEAffvihHnzwwasaTABA2fG3KABIOnr0qNq3b69///vfGjp0qNXlAMANj+lyAAAAmI4kEwAAAKajyQQAAIDpaDIBAABgOppMAAAAmI4mEwAAAKajyQQAAIDp/h+pBn3kpXxPhgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 842.4x595.44 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# actual markers heatmap\n",
    "markers = ['Dazl','Sycp1','Insl6','Piwil1','Pttg1','Spag6','Mllt10','Aurka','Acrv1','Spaca1','Tsga8','Tssk6']\n",
    "sns.set(rc={'figure.figsize':(11.7,8.27)})\n",
    "#scale_int_df = np.arcsinh(scale_int_df)\n",
    "ax = sns.heatmap(scale_int_df.loc[markers,:])\n",
    "ax.set(xlabel=\"Cell Type\")\n",
    "plt.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4d902e92",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>mt-Rnr2</th>\n",
       "      <td>28.580413</td>\n",
       "      <td>8.294124</td>\n",
       "      <td>10.026773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ncl</th>\n",
       "      <td>20.230924</td>\n",
       "      <td>0.180933</td>\n",
       "      <td>0.079943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Hsp90ab1</th>\n",
       "      <td>19.172715</td>\n",
       "      <td>0.787720</td>\n",
       "      <td>0.718273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dazl</th>\n",
       "      <td>15.695123</td>\n",
       "      <td>0.201191</td>\n",
       "      <td>0.099891</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Prrc2c</th>\n",
       "      <td>13.319144</td>\n",
       "      <td>0.020841</td>\n",
       "      <td>0.427714</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tpr</th>\n",
       "      <td>12.179163</td>\n",
       "      <td>0.040313</td>\n",
       "      <td>0.364510</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Anp32b</th>\n",
       "      <td>11.414390</td>\n",
       "      <td>0.259150</td>\n",
       "      <td>0.029915</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mt-Nd1</th>\n",
       "      <td>11.120896</td>\n",
       "      <td>0.445073</td>\n",
       "      <td>0.742633</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rpl4</th>\n",
       "      <td>10.892597</td>\n",
       "      <td>0.896439</td>\n",
       "      <td>1.013455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rbm39</th>\n",
       "      <td>9.742898</td>\n",
       "      <td>0.475481</td>\n",
       "      <td>0.036741</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                spg       spc        spd\n",
       "mt-Rnr2   28.580413  8.294124  10.026773\n",
       "Ncl       20.230924  0.180933   0.079943\n",
       "Hsp90ab1  19.172715  0.787720   0.718273\n",
       "Dazl      15.695123  0.201191   0.099891\n",
       "Prrc2c    13.319144  0.020841   0.427714\n",
       "Tpr       12.179163  0.040313   0.364510\n",
       "Anp32b    11.414390  0.259150   0.029915\n",
       "mt-Nd1    11.120896  0.445073   0.742633\n",
       "Rpl4      10.892597  0.896439   1.013455\n",
       "Rbm39      9.742898  0.475481   0.036741"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_int_df.sort_values(\"spg\", ascending=False).head(10) # this is top 10 genes for 'spg' cell type"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "b654c5b2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Dazl</th>\n",
       "      <td>15.695407</td>\n",
       "      <td>0.201094</td>\n",
       "      <td>0.099881</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sycp1</th>\n",
       "      <td>4.868067</td>\n",
       "      <td>1.394191</td>\n",
       "      <td>0.117887</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             spg       spc       spd\n",
       "Dazl   15.695407  0.201094  0.099881\n",
       "Sycp1   4.868067  1.394191  0.117887"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_int_df.loc[['Dazl','Sycp1']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "40b8d687",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Insl6</th>\n",
       "      <td>0.015655</td>\n",
       "      <td>1.678595</td>\n",
       "      <td>0.542597</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Piwil1</th>\n",
       "      <td>0.000611</td>\n",
       "      <td>2.746888</td>\n",
       "      <td>0.141452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pttg1</th>\n",
       "      <td>0.274248</td>\n",
       "      <td>0.996705</td>\n",
       "      <td>0.130978</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Spag6</th>\n",
       "      <td>0.005403</td>\n",
       "      <td>2.688653</td>\n",
       "      <td>0.577020</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Mllt10</th>\n",
       "      <td>0.204443</td>\n",
       "      <td>3.554583</td>\n",
       "      <td>0.128367</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Aurka</th>\n",
       "      <td>0.116457</td>\n",
       "      <td>0.781402</td>\n",
       "      <td>0.048107</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             spg       spc       spd\n",
       "Insl6   0.015655  1.678595  0.542597\n",
       "Piwil1  0.000611  2.746888  0.141452\n",
       "Pttg1   0.274248  0.996705  0.130978\n",
       "Spag6   0.005403  2.688653  0.577020\n",
       "Mllt10  0.204443  3.554583  0.128367\n",
       "Aurka   0.116457  0.781402  0.048107"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_int_df.loc[[\"Insl6\",\"Piwil1\",\"Pttg1\",\"Spag6\",\"Mllt10\",\"Aurka\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "1b10df26",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Ldhc</th>\n",
       "      <td>0.351632</td>\n",
       "      <td>23.709996</td>\n",
       "      <td>4.615430</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ubb</th>\n",
       "      <td>2.220421</td>\n",
       "      <td>21.834673</td>\n",
       "      <td>8.753378</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fabp9</th>\n",
       "      <td>0.258119</td>\n",
       "      <td>21.452827</td>\n",
       "      <td>3.565026</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pabpc1</th>\n",
       "      <td>3.990908</td>\n",
       "      <td>20.404309</td>\n",
       "      <td>9.974965</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Meig1</th>\n",
       "      <td>0.115687</td>\n",
       "      <td>17.847964</td>\n",
       "      <td>7.053704</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Calm2</th>\n",
       "      <td>4.790556</td>\n",
       "      <td>17.533388</td>\n",
       "      <td>1.278982</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Morf4l1</th>\n",
       "      <td>0.410265</td>\n",
       "      <td>17.439189</td>\n",
       "      <td>5.575141</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Calm1</th>\n",
       "      <td>0.819953</td>\n",
       "      <td>16.447940</td>\n",
       "      <td>3.897635</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tuba3b</th>\n",
       "      <td>1.945053</td>\n",
       "      <td>13.729678</td>\n",
       "      <td>3.524022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Rsph1</th>\n",
       "      <td>0.091812</td>\n",
       "      <td>13.402599</td>\n",
       "      <td>1.445491</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              spg        spc       spd\n",
       "Ldhc     0.351632  23.709996  4.615430\n",
       "Ubb      2.220421  21.834673  8.753378\n",
       "Fabp9    0.258119  21.452827  3.565026\n",
       "Pabpc1   3.990908  20.404309  9.974965\n",
       "Meig1    0.115687  17.847964  7.053704\n",
       "Calm2    4.790556  17.533388  1.278982\n",
       "Morf4l1  0.410265  17.439189  5.575141\n",
       "Calm1    0.819953  16.447940  3.897635\n",
       "Tuba3b   1.945053  13.729678  3.524022\n",
       "Rsph1    0.091812  13.402599  1.445491"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_int_df.sort_values(\"spc\", ascending=False).head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7073b266",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Acrv1</th>\n",
       "      <td>0.050636</td>\n",
       "      <td>2.494148</td>\n",
       "      <td>11.502768</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Spaca1</th>\n",
       "      <td>0.030794</td>\n",
       "      <td>0.821353</td>\n",
       "      <td>5.755235</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tsga8</th>\n",
       "      <td>0.035110</td>\n",
       "      <td>1.372576</td>\n",
       "      <td>14.576832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tssk6</th>\n",
       "      <td>0.012663</td>\n",
       "      <td>0.173216</td>\n",
       "      <td>5.080324</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             spg       spc        spd\n",
       "Acrv1   0.050636  2.494148  11.502768\n",
       "Spaca1  0.030794  0.821353   5.755235\n",
       "Tsga8   0.035110  1.372576  14.576832\n",
       "Tssk6   0.012663  0.173216   5.080324"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_int_df.loc[['Acrv1','Spaca1','Tsga8','Tssk6']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "08f694af",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Tnp1</th>\n",
       "      <td>0.143538</td>\n",
       "      <td>8.201915</td>\n",
       "      <td>42.319243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Smcp</th>\n",
       "      <td>0.106150</td>\n",
       "      <td>5.974517</td>\n",
       "      <td>26.739145</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tsga8</th>\n",
       "      <td>0.035110</td>\n",
       "      <td>1.372575</td>\n",
       "      <td>14.576832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Dbil5</th>\n",
       "      <td>0.103935</td>\n",
       "      <td>2.976323</td>\n",
       "      <td>13.439148</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Gm9999</th>\n",
       "      <td>0.014623</td>\n",
       "      <td>1.698540</td>\n",
       "      <td>13.283367</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Acrv1</th>\n",
       "      <td>0.050636</td>\n",
       "      <td>2.494147</td>\n",
       "      <td>11.502766</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Odf2</th>\n",
       "      <td>0.893012</td>\n",
       "      <td>3.513132</td>\n",
       "      <td>11.031875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D830044I16Rik</th>\n",
       "      <td>0.034944</td>\n",
       "      <td>1.233684</td>\n",
       "      <td>10.556932</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ccdc136</th>\n",
       "      <td>1.536566</td>\n",
       "      <td>4.922919</td>\n",
       "      <td>10.513521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mt-Rnr2</th>\n",
       "      <td>28.581993</td>\n",
       "      <td>8.285814</td>\n",
       "      <td>10.019044</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     spg       spc        spd\n",
       "Tnp1            0.143538  8.201915  42.319243\n",
       "Smcp            0.106150  5.974517  26.739145\n",
       "Tsga8           0.035110  1.372575  14.576832\n",
       "Dbil5           0.103935  2.976323  13.439148\n",
       "Gm9999          0.014623  1.698540  13.283367\n",
       "Acrv1           0.050636  2.494147  11.502766\n",
       "Odf2            0.893012  3.513132  11.031875\n",
       "D830044I16Rik   0.034944  1.233684  10.556932\n",
       "Ccdc136         1.536566  4.922919  10.513521\n",
       "mt-Rnr2        28.581993  8.285814  10.019044"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_int_df.sort_values(\"spd\", ascending=False).head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "8fb8b18e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Mllt10</th>\n",
       "      <td>0.204443</td>\n",
       "      <td>3.554583</td>\n",
       "      <td>0.128367</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Sycp1</th>\n",
       "      <td>4.868067</td>\n",
       "      <td>1.394191</td>\n",
       "      <td>0.117887</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Spaca1</th>\n",
       "      <td>0.030794</td>\n",
       "      <td>0.821353</td>\n",
       "      <td>5.755235</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             spg       spc       spd\n",
       "Mllt10  0.204443  3.554583  0.128367\n",
       "Sycp1   4.868067  1.394191  0.117887\n",
       "Spaca1  0.030794  0.821353  5.755235"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scale_int_df.loc[[\"Mllt10\", \"Sycp1\", \"Spaca1\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "18481788",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.5, 15.0, 'Cell Type')]"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#int_df = sharp.run_interpretation()\n",
    "\n",
    "#int_df.columns = keys\n",
    "#reorg_keys = [\"spg\",\"spc\",\"spd\"]\n",
    "#int_df = int_df[reorg_keys]\n",
    "#int_df = int_df.abs()\n",
    "keep_genes = int_df.sort_values(\"spg\", ascending=False).head(4).index.tolist()\n",
    "keep_genes += int_df.sort_values(\"spc\", ascending=False).head(4).index.tolist()\n",
    "keep_genes += int_df.sort_values(\"spd\", ascending=False).head(4).index.tolist()\n",
    "ax = sns.heatmap(int_df.loc[keep_genes,:])\n",
    "ax.set(xlabel=\"Cell Type\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "fd70bbc4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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pdWrV0uSdu3apezsbCUkJMjT01PDhg3T3XfffcV7um0CCwAAgOJcVYFduHChZs+eXWJ8wIABGjhw4BWvPXnypPz8/OTpWZRWBgYGKiMj47Lnz507V48//rj8/PwkSTabTQ888ID69u2rffv2qU+fPlq9erWqVq162TlIYAEAAK5zvXr1UseOHUuM/776unbtWk2cOLHYWN26dWWz2YqN/X7/N6dOndKWLVs0YcIE51jXrv99B+n2229X48aN9c0336hdu3aXjZcEFgAAwCJc9e79n2kVkKSoqChFRUUVGysoKFBoaKgKCwvl4eGhrKws2e32S16/adMmhYWFycfHxzm2atUqNW3aVDfffLOkomf08vK6YhymrwMLAACAP8chwyXbtfDy8lLz5s2VlpYmqSghDQsLu+S53333nZo3b15sbO/evXrzzTclFfXH7tmzR82aNbviPUlgAQAAcE3GjBmjZcuWKTo6Wl9//bWGDBkiSVqyZIlmzpzpPO/w4cMKCgoqdm3//v2VnZ2tmJgYDR48WJMmTXL2x16O264DawbWgYUVsQ4srIh1YGFF7rAObIual65sXqvtRz5zybyuQgUWAAAAlsJLXAAAABbBL86LkMBe5KDjjNkhAKXW2BFgdghAqdmCbjE7BAAWRgILAABgEe76KdnyRgILAABgEbQQFOElLgAAAFgKFVgAAACLoIWgCBVYAAAAWAoVWAAAAIswqMBKogILAAAAi6ECCwAAYBEOViGQRAILAABgGbQQFKGFAAAAAJbiFhXY9PR0RUZGKjg4WJJ0/vx5NW3aVEOHDtX+/fs1e/ZsLVq0qMR18fHxSk1N1axZsyRJAwcO1OzZs7VixQr5+/tLkrp06aIePXqU38MAAAC4CC0ERdwigZUku92u1NRUSUVfmZg+fboGDRqkwYMHX/aa386/2A8//KDp06frrrvuclmsAAAAMI9bthDYbDYNHDhQ+/bt0969e3Xy5Ek9/vjjio2N1ciRI5Wfny9JCgkJKXHtDz/8oNdee02xsbEaN26c8vLyyjt8AAAAlzBc9D+rccsEVpK8vb1Vt25dVatWTenp6Ro1apQ++OADnT17VkuWLLnkNWfPnlXDhg01fPhwrVy5Ujk5OZo7d245Rw4AAABXctsEViqqxPr6+qp58+a65ZZbZLPZFBsbq23btl3y/MqVK+v1119X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",
      "text/plain": [
       "<Figure size 842.4x595.44 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "expr = pd.read_csv(\"figures/testis_expr.csv\", index_col=0)\n",
    "#expr = np.arcsinh(expr)\n",
    "sns.set(rc={'figure.figsize':(11.7,8.27)})\n",
    "ax = sns.heatmap(expr)\n",
    "ax.set(xlabel=\"Cell Type\")\n",
    "plt.plot()\n",
    "#plt.savefig(\"figures/jung_expr_heatmap.pdf\", format=\"pdf\", bbox_inches=\"tight\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "5de88db1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "spg    0.001166\n",
       "spc    0.008381\n",
       "spd    0.000387\n",
       "Name: Aurka, dtype: float64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "int_df.loc[\"Aurka\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "8e44f0fa",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>spg</th>\n",
       "      <th>spc</th>\n",
       "      <th>spd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Ldhc</th>\n",
       "      <td>0.001254</td>\n",
       "      <td>0.359617</td>\n",
       "      <td>0.038904</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Ubb</th>\n",
       "      <td>0.015172</td>\n",
       "      <td>0.325207</td>\n",
       "      <td>0.083532</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Fabp9</th>\n",
       "      <td>0.001195</td>\n",
       "      <td>0.307363</td>\n",
       "      <td>0.020371</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pabpc1</th>\n",
       "      <td>0.022872</td>\n",
       "      <td>0.282038</td>\n",
       "      <td>0.075385</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Meig1</th>\n",
       "      <td>0.001429</td>\n",
       "      <td>0.248299</td>\n",
       "      <td>0.018715</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Calm2</th>\n",
       "      <td>0.024387</td>\n",
       "      <td>0.242530</td>\n",
       "      <td>0.010826</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Calm1</th>\n",
       "      <td>0.003014</td>\n",
       "      <td>0.218585</td>\n",
       "      <td>0.036050</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Tuba3b</th>\n",
       "      <td>0.009845</td>\n",
       "      <td>0.203808</td>\n",
       "      <td>0.038230</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Lyar</th>\n",
       "      <td>0.005533</td>\n",
       "      <td>0.201818</td>\n",
       "      <td>0.049424</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Morf4l1</th>\n",
       "      <td>0.004483</td>\n",
       "      <td>0.194731</td>\n",
       "      <td>0.038400</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              spg       spc       spd\n",
       "Ldhc     0.001254  0.359617  0.038904\n",
       "Ubb      0.015172  0.325207  0.083532\n",
       "Fabp9    0.001195  0.307363  0.020371\n",
       "Pabpc1   0.022872  0.282038  0.075385\n",
       "Meig1    0.001429  0.248299  0.018715\n",
       "Calm2    0.024387  0.242530  0.010826\n",
       "Calm1    0.003014  0.218585  0.036050\n",
       "Tuba3b   0.009845  0.203808  0.038230\n",
       "Lyar     0.005533  0.201818  0.049424\n",
       "Morf4l1  0.004483  0.194731  0.038400"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#spc,Insl6,Piwil1,Pttg1,Spag6,Mllt10,Aurka\n",
    "keep_genes = int_df.sort_values(\"spc\", ascending=False).head(10).index.tolist()\n",
    "#keep_genes = int_df.sort_values(\"spd\", ascending=False).head(10).index.tolist()\n",
    "#keep_genes = int_df.sort_values(\"spg\", ascending=False).head(10).index.tolist()\n",
    "int_df.loc[keep_genes,:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "dcb425b7",
   "metadata": {},
   "outputs": [],
   "source": [
    "umap_embedding = pd.read_csv(\"/home/groups/ConradLab/daniel/sharp_data/jung/umap_embedding.csv\", index_col=0)\n",
    "umap_embedding['real labels'] = pd.read_csv(\"/home/groups/ConradLab/daniel/sharp_data/jung/labels.csv\", index_col=0).iloc[:,0]\n",
    "\n",
    "umap_embedding['confident labels'] = sharp.confident_labels\n",
    "map_dict = {-1:\"unknown\", 0:\"spc\", 1:\"spd\", 2:\"spg\"}\n",
    "umap_embedding['confident labels'] = umap_embedding[\"confident labels\"].map(map_dict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "ecd59dd0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='UMAP_1', ylabel='UMAP_2'>"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.scatterplot(data=umap_embedding, x=\"UMAP_1\", y=\"UMAP_2\", hue=\"real labels\", s=6,  palette=dict(spg='#db5f57', spd=\"#d3db57\", spc = \"#57db5f\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "af2f0f36",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='UMAP_1', ylabel='UMAP_2'>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.scatterplot(data=umap_embedding, x=\"UMAP_1\", y=\"UMAP_2\", hue=\"confident labels\", s=6,  palette=dict(spg='#db5f57', spd=\"#d3db57\", spc = \"#57db5f\", unknown='#5f57db'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c65678b8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['spc', 'spd', 'spg'], dtype='object')\n"
     ]
    }
   ],
   "source": [
    "all_labels_original = pd.read_csv(\"/home/groups/ConradLab/daniel/sharp_data/jung/preds.csv\", index_col=0)\n",
    "scina_preds_original,_ = pd.factorize(all_labels_original.scina, sort=True)\n",
    "sctype_preds_original,_ = pd.factorize(all_labels_original.sctype, sort=True)\n",
    "scsorter_preds_original,_ = pd.factorize(all_labels_original.scsorter, sort=True)\n",
    "print(_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "135001cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_class_accuracy(conf_mat, labels):\n",
    "    label_count = 0\n",
    "    for i in range(conf_mat.shape[0]):\n",
    "        if conf_mat.shape[0] > len(labels) and i ==0: continue\n",
    "        print(labels[label_count])\n",
    "        print(conf_mat[i,i] / sum(conf_mat[i,:]))\n",
    "        label_count +=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "ed36df14",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "1\n",
      "2\n",
      "3\n"
     ]
    }
   ],
   "source": [
    "for i in range(results[1].shape[0]):\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "1bdca2cc",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.5390173196792603, array([[  0,   0,   0,   0],\n",
      "       [152,  33,  51,   8],\n",
      "       [ 77,   4,  74,   1],\n",
      "       [ 25,   0,   1, 266]]), 0.5773993730545044, array([[  0,   0,   0,   0],\n",
      "       [122,  33,  51,   6],\n",
      "       [ 73,   4,  74,   1],\n",
      "       [ 15,   0,   1, 266]]), 0.0, array([[ 0,  0,  0,  0],\n",
      "       [30,  0,  0,  2],\n",
      "       [ 4,  0,  0,  0],\n",
      "       [10,  0,  0,  0]]))\n",
      "spc\n",
      "0.13524590163934427\n",
      "spd\n",
      "0.47435897435897434\n",
      "spg\n",
      "0.910958904109589\n"
     ]
    }
   ],
   "source": [
    "results = utilities.validation_metrics(torch.tensor(real_labels[keep_cells]), torch.tensor(scina_preds_original), train_nodes, test_nodes)\n",
    "print(results)\n",
    "get_class_accuracy(results[1], keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "db75cf85",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.8482658863067627, array([[  0,   0,   0,   0],\n",
      "       [  8, 167,  68,   1],\n",
      "       [  1,  16, 139,   0],\n",
      "       [ 11,   0,   0, 281]]), 0.8637771010398865, array([[  0,   0,   0,   0],\n",
      "       [  1, 144,  66,   1],\n",
      "       [  0,  16, 136,   0],\n",
      "       [  4,   0,   0, 278]]), 0.6304348111152649, array([[ 0,  0,  0,  0],\n",
      "       [ 7, 23,  2,  0],\n",
      "       [ 1,  0,  3,  0],\n",
      "       [ 7,  0,  0,  3]]))\n",
      "spc\n",
      "0.6844262295081968\n",
      "spd\n",
      "0.8910256410256411\n",
      "spg\n",
      "0.9623287671232876\n"
     ]
    }
   ],
   "source": [
    "results = utilities.validation_metrics(torch.tensor(real_labels[keep_cells]), torch.tensor(sctype_preds_original), train_nodes, test_nodes)\n",
    "print(results)\n",
    "get_class_accuracy(results[1], keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "6e3b2cc3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.7745664715766907, array([[  0,   0,   0,   0],\n",
      "       [ 26, 120,  86,  12],\n",
      "       [  5,  14, 137,   0],\n",
      "       [  9,   4,   0, 279]]), 0.8281733989715576, array([[  0,   0,   0,   0],\n",
      "       [ 19, 119,  72,   2],\n",
      "       [  4,  11, 137,   0],\n",
      "       [  2,   1,   0, 279]]), 0.021739130839705467, array([[ 0,  0,  0,  0],\n",
      "       [ 7,  1, 14, 10],\n",
      "       [ 1,  3,  0,  0],\n",
      "       [ 7,  3,  0,  0]]))\n",
      "spc\n",
      "0.4918032786885246\n",
      "spd\n",
      "0.8782051282051282\n",
      "spg\n",
      "0.9554794520547946\n"
     ]
    }
   ],
   "source": [
    "results = utilities.validation_metrics(torch.tensor(real_labels[keep_cells]), torch.tensor(scsorter_preds_original), train_nodes, test_nodes)\n",
    "print(results)\n",
    "get_class_accuracy(results[1], keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "038f2b92",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>scina</th>\n",
       "      <th>scsorter</th>\n",
       "      <th>sctype</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>CGTTCCGACGT</th>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ATGCAGTACCG</th>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GCTGCGCCTCG</th>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GACCAAGGCAC</th>\n",
       "      <td>NaN</td>\n",
       "      <td>spc</td>\n",
       "      <td>spc</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GGGCTTTGCCA</th>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "      <td>spg</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            scina scsorter sctype\n",
       "CGTTCCGACGT   spg      spg    spg\n",
       "ATGCAGTACCG   spg      spg    spg\n",
       "GCTGCGCCTCG   spg      spg    spg\n",
       "GACCAAGGCAC   NaN      spc    spc\n",
       "GGGCTTTGCCA   spg      spg    spg"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# updated marker experiment\n",
    "all_labels = pd.read_csv(\"/home/groups/ConradLab/daniel/sharp_data/jung/preds_att_marker_test.csv\", index_col=0)\n",
    "scina_preds,_ = pd.factorize(all_labels.scina, sort=True)\n",
    "sctype_preds,_ = pd.factorize(all_labels.sctype, sort=True)\n",
    "scsorter_preds,_ = pd.factorize(all_labels.scsorter, sort=True)\n",
    "#sc_preds,_ = pd.factorize(all_labels.scina, sort=True)\n",
    "#real_labels,keys = pd.factorize(all_labels, sort=True)\n",
    "all_labels.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "e171ea57",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.6575144529342651, array([[  0,   0,   0,   0],\n",
      "       [141,  40,  55,   8],\n",
      "       [ 11,  16, 127,   2],\n",
      "       [  4,   0,   0, 288]]), 0.6842105388641357, array([[  0,   0,   0,   0],\n",
      "       [113,  40,  53,   6],\n",
      "       [ 10,  16, 124,   2],\n",
      "       [  4,   0,   0, 278]]), 0.28260868787765503, array([[ 0,  0,  0,  0],\n",
      "       [28,  0,  2,  2],\n",
      "       [ 1,  0,  3,  0],\n",
      "       [ 0,  0,  0, 10]]))\n",
      "spc\n",
      "0.16393442622950818\n",
      "spd\n",
      "0.8141025641025641\n",
      "spg\n",
      "0.9863013698630136\n"
     ]
    }
   ],
   "source": [
    "results = utilities.validation_metrics(torch.tensor(real_labels[keep_cells]), torch.tensor(scina_preds), train_nodes, test_nodes)\n",
    "print(results)\n",
    "get_class_accuracy(results[1], keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "f3271bf7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.8482658863067627, array([[  0,   0,   0,   0],\n",
      "       [  8, 167,  68,   1],\n",
      "       [  1,  16, 139,   0],\n",
      "       [ 11,   0,   0, 281]]), 0.8637771010398865, array([[  0,   0,   0,   0],\n",
      "       [  1, 144,  66,   1],\n",
      "       [  0,  16, 136,   0],\n",
      "       [  4,   0,   0, 278]]), 0.6304348111152649, array([[ 0,  0,  0,  0],\n",
      "       [ 7, 23,  2,  0],\n",
      "       [ 1,  0,  3,  0],\n",
      "       [ 7,  0,  0,  3]]))\n",
      "spc\n",
      "0.6844262295081968\n",
      "spd\n",
      "0.8910256410256411\n",
      "spg\n",
      "0.9623287671232876\n"
     ]
    }
   ],
   "source": [
    "results = utilities.validation_metrics(torch.tensor(real_labels[keep_cells]), torch.tensor(sctype_preds), train_nodes, test_nodes)\n",
    "print(results)\n",
    "get_class_accuracy(results[1], keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "b3437a47",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(0.8424855470657349, array([[151,  81,  12],\n",
      "       [ 14, 141,   1],\n",
      "       [  1,   0, 291]]), 0.8560371398925781, array([[133,  75,   4],\n",
      "       [ 13, 139,   0],\n",
      "       [  1,   0, 281]]), 0.6521739363670349, array([[18,  6,  8],\n",
      "       [ 1,  2,  1],\n",
      "       [ 0,  0, 10]]))\n",
      "spc\n",
      "0.6188524590163934\n",
      "spd\n",
      "0.9038461538461539\n",
      "spg\n",
      "0.9965753424657534\n"
     ]
    }
   ],
   "source": [
    "results = utilities.validation_metrics(torch.tensor(real_labels[keep_cells]), torch.tensor(scsorter_preds), train_nodes, test_nodes)\n",
    "print(results)\n",
    "get_class_accuracy(results[1], keys)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "d68a96c4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[  0   0   0   0]\n",
      " [141  40  55   8]\n",
      " [ 11  16 127   2]\n",
      " [  4   0   0 288]]\n"
     ]
    }
   ],
   "source": [
    "print(results[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "53d47902",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-1\n",
      "0\n",
      "[0 0 0 0]\n",
      "nan\n",
      "0\n",
      "40\n",
      "[141  40  55   8]\n",
      "0.16393442622950818\n",
      "1\n",
      "127\n",
      "[ 11  16 127   2]\n",
      "0.8141025641025641\n",
      "2\n",
      "288\n",
      "[  4   0   0 288]\n",
      "0.9863013698630136\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-12-0b3b14f8b341>:6: RuntimeWarning: invalid value encountered in long_scalars\n",
      "  print(conf_mat[i,i] / sum(conf_mat[i,:]))\n"
     ]
    }
   ],
   "source": [
    "conf_mat = results[1]\n",
    "for i in [0,1,2,3]:\n",
    "    print(i-1)\n",
    "    print(conf_mat[i,i])\n",
    "    print(conf_mat[i,:])\n",
    "    print(conf_mat[i,i] / sum(conf_mat[i,:]))"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.9.7 ('thesis')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "vscode": {
   "interpreter": {
    "hash": "1602471d9f8ed18664a5a568808ad6b32d5ac9c03cbc394cc7452913339cabc4"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
